#[cfg(test)]
mod tests;
use crate::engine::types::PhpArray;
use std::sync::{Mutex, OnceLock};
pub struct PhpCoreGlobals {
pub get: PhpArray,
pub post: PhpArray,
pub cookie: PhpArray,
pub server: PhpArray,
pub env: PhpArray,
pub files: PhpArray,
pub request: PhpArray,
pub error_reporting: u32,
pub display_errors: bool,
pub log_errors: bool,
pub error_log: Option<String>,
}
impl PhpCoreGlobals {
pub fn new() -> Self {
Self {
get: PhpArray::new(),
post: PhpArray::new(),
cookie: PhpArray::new(),
server: PhpArray::new(),
env: PhpArray::new(),
files: PhpArray::new(),
request: PhpArray::new(),
error_reporting: 0,
display_errors: true,
log_errors: false,
error_log: None,
}
}
}
impl Default for PhpCoreGlobals {
fn default() -> Self {
Self::new()
}
}
fn php_core_globals() -> &'static Mutex<PhpCoreGlobals> {
static GLOBALS: OnceLock<Mutex<PhpCoreGlobals>> = OnceLock::new();
GLOBALS.get_or_init(|| Mutex::new(PhpCoreGlobals::new()))
}
pub fn php_init_globals() {
let _ = php_core_globals();
}
pub fn php_get_globals() -> &'static Mutex<PhpCoreGlobals> {
php_core_globals()
}
pub fn php_set_error_reporting(level: u32) {
let mut globals = php_core_globals().lock().unwrap();
globals.error_reporting = level;
}
pub fn php_get_error_reporting() -> u32 {
let globals = php_core_globals().lock().unwrap();
globals.error_reporting
}