从另一个类中的静态函数调用时,PHP类构造函数未运行

时间:2015-03-11 17:45:20

标签: php static-methods static-linking

我目前已加盖印章,我无法看到我做错了什么。我在下面有一个静态函数 request()

private static function request(){

   if($_SERVER['REQUEST_METHOD']=='GET'){

       $data = RunData::get('cmd');

   }

调用静态函数 get(),后者又调用私有函数 clean(),它使用在类构造函数中设置的变量加载Injected类消毒

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 类加载,该类被注入构造函数。

我可能错过了什么?构造函数似乎没有运行

由于

1 个答案:

答案 0 :(得分:0)

您更正了,静态调用类时不会调用__construct()。在调用方法之前,您需要通过某种设置方法注入Sanitize类来手动设置对象。

例如:

public static function setSanitizeClass(Sanitize $sanitise)
{
    self::$sanitize = $sanitize;
}

然后:

RunData::setSanitizeClass(new Sanitize());
$data = RunData::get('cmd');