PHP Class 构造函数不是 运行 当从另一个 class 中的静态函数调用时
PHP Class constructor not running when called from static function in another class
我现在被戳了,看不出哪里做错了。我在下面有一个静态函数 request():
private static function request(){
if($_SERVER['REQUEST_METHOD']=='GET'){
$data = RunData::get('cmd');
}
调用静态函数 get(),后者又调用私有函数 clean(),后者使用 class 构造函数加载 Injected class Sanitize
class RunData {
public static $sanitize;
public function __construct( Sanitize $sanitize ){
self::$sanitize = $sanitize;
}
private static function clean($variable_array){
if(is_array($variable_array)){
$filters = array('string' => 'sanitize_string');
return self::$sanitize->filter($variable_array, $filters);
}
}
public static function get($variable){
if(self::clean($_GET)){
return $_GET[$variable];
}
}
}
但是当我 运行 我得到这个错误。
Fatal error: Call to a member function filter() on a non-object
这个过滤器函数是从 Sanitize Class 加载的,它被注入到构造函数中。
我可能错过了什么???构造函数好像不是运行ning
谢谢
你是对的,静态调用 class 时不会调用 __construct()
。在调用方法之前,您需要通过某种设置方法注入 Sanitize
class 来手动设置对象。
例如:
public static function setSanitizeClass(Sanitize $sanitise)
{
self::$sanitize = $sanitize;
}
然后:
RunData::setSanitizeClass(new Sanitize());
$data = RunData::get('cmd');
我现在被戳了,看不出哪里做错了。我在下面有一个静态函数 request():
private static function request(){
if($_SERVER['REQUEST_METHOD']=='GET'){
$data = RunData::get('cmd');
}
调用静态函数 get(),后者又调用私有函数 clean(),后者使用 class 构造函数加载 Injected class Sanitize
class RunData {
public static $sanitize;
public function __construct( Sanitize $sanitize ){
self::$sanitize = $sanitize;
}
private static function clean($variable_array){
if(is_array($variable_array)){
$filters = array('string' => 'sanitize_string');
return self::$sanitize->filter($variable_array, $filters);
}
}
public static function get($variable){
if(self::clean($_GET)){
return $_GET[$variable];
}
}
}
但是当我 运行 我得到这个错误。
Fatal error: Call to a member function filter() on a non-object
这个过滤器函数是从 Sanitize Class 加载的,它被注入到构造函数中。
我可能错过了什么???构造函数好像不是运行ning
谢谢
你是对的,静态调用 class 时不会调用 __construct()
。在调用方法之前,您需要通过某种设置方法注入 Sanitize
class 来手动设置对象。
例如:
public static function setSanitizeClass(Sanitize $sanitise)
{
self::$sanitize = $sanitize;
}
然后:
RunData::setSanitizeClass(new Sanitize());
$data = RunData::get('cmd');