php filter_input 内部解析错误 class

php filter_input parse error inside class

只是尝试使用 filter_input 设置项目根目录。有人可以解释为什么 class 中受保护和私有变量的过滤器输入报告 PARSE 错误吗?但是,如果在 class 之外或 class 的函数内部使用,它会起作用。

有没有更好的方法做到这一点,使其可以在全球范围内使用?我发现这被称为很多,并且宁愿做一次。

$test = filter_input(INPUT_SERVER,'DOCUMENT_ROOT');
echo $test; //good

class FooBar{
    protected $_test = filter_input(INPUT_SERVER,'DOCUMENT_ROOT'); //bad - Parse error: syntax error, unexpected '(', expecting ',' or ';' 
    private $_test2 = filter_input(INPUT_SERVER,'DOCUMENT_ROOT'); //bad - Parse error: syntax error, unexpected '(', expecting ',' or ';' 
    function __construct() {
    }




    public function getProducts(){
        include_once 
 (filter_input(INPUT_SERVER,'DOCUMENT_ROOT').'/obj/user.php'); //good
   }
}

您不能直接将函数 return 值分配给 class 定义中的 属性。

这是因为该函数可以 return 不同的 return 值,而 class 只是一个蓝图,您必须将其实例化为对象才能使用。

对于根据您的 class 定义创建的对象,您可以在构造函数中初始化任何 属性:

class FooBar {
    protected $var = null;
    private $var2 = null; 
    function __construct() {
        $this->var = func1();
        $this->var2 = func2();
    }
}
// no parse error

尽管如此,为什么要对内部常量使用 filter_input?您只需要过滤来自外部的输入,即 GET/POST/SESSION 内容(用户输入)、从文件中读取的输入、来自外部 API 等。但是您不需要在内部常量上使用它,例如 DOCUMENT_ROOT:

class FooBar {
    private $_docroot = $_SERVER['DOCUMENT_ROOT'];
}
// no parse error