从另一个类中的静态函数调用时,PHP类构造函数未运行
我现在已经盖章了,我看不出哪里做错了。我有一个静态函数request()如下:从另一个类中的静态函数调用时,PHP类构造函数未运行,php,static-methods,static-linking,Php,Static Methods,Static Linking,我现在已经盖章了,我看不出哪里做错了。我有一个静态函数request()如下: private static function request(){ if($_SERVER['REQUEST_METHOD']=='GET'){ $data = RunData::get('cmd'); } 它调用一个静态函数get(),然后调用一个私有函数clean(),该函数使用类构造函数中设置的变量加载一个注入类Sanitize class RunData { pu
private static function request(){
if($_SERVER['REQUEST_METHOD']=='GET'){
$data = RunData::get('cmd');
}
它调用一个静态函数get(),然后调用一个私有函数clean(),该函数使用类构造函数中设置的变量加载一个注入类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];
}
}
}
但当我运行时,我得到了这个错误
致命错误:对非对象调用成员函数filter()
此筛选函数是从注入构造函数的Sanitize类加载的
我可能错过了什么???构造函数似乎没有运行
谢谢你说得对,静态调用类时不会调用
\u construct()
。在调用方法之前,您需要通过某种设置方法注入Sanitize
类来手动设置对象
例如:
public static function setSanitizeClass(Sanitize $sanitise)
{
self::$sanitize = $sanitize;
}
然后:
RunData::setSanitizeClass(new Sanitize());
$data = RunData::get('cmd');
当您只是静态地调用类方法时,将永远不会调用构造函数,因此将永远不会设置
self::$sanitize
。我试图了解如何在不必初始化其他类或方法的情况下完成此操作。看来我得重做一些代码了,没办法。