php Ошибка разбора filter_input внутри класса - PullRequest
0 голосов
/ 21 апреля 2020
  • Конфигурация проекта в режиме разработки с WAMP.
  • PHP доступны версии 5 и 7.

Просто пытаюсь настроить проект root используя filter_input. Может кто-нибудь объяснить, почему фильтр ввода для защищенных и закрытых переменных внутри класса сообщает об ОШИБКЕ PARSE? Однако, если он используется вне класса или внутри функции класса, он работает.

Есть ли лучший способ сделать это, чтобы его можно было использовать глобально? Я считаю, что это называется много и предпочел бы сделать это один раз.

$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
   }
}

1 Ответ

2 голосов
/ 21 апреля 2020

Вы не можете напрямую присвоить возвращаемое значение функции свойству в определении класса.

Это связано с тем, что функция может возвращать разные возвращаемые значения, а класс является только планом, который вы должны создать как объект для использования.

Для объектов, созданных из определения класса, вы можете инициализировать любое свойство в конструкторе:

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

Несмотря на это, почему вы используете filter_input для внутренней константы? Вам нужно только отфильтровать входные данные извне, то есть содержимое GET / POST / SESSION (пользовательский ввод), чтение входных данных из файлов, из внешних API и т. Д. c. Но вам не нужно использовать это для внутренних констант, таких как INPUT_SERVER:

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