如果可以在php中的类内使用filter_input(POST或GET)函数

如果可以在php中的类内使用filter_input(POST或GET)函数,php,class,Php,Class,我正在努力学习PHP类,在我的第一节课上我遇到了麻烦 代码示例: class Loader { public $action = filter_input(INPUT_GET, "action"); public $dir = ''; public $exceptions = ''; function __construct($exceptions, $dir) { if(count($exceptions) > 0){

我正在努力学习PHP类,在我的第一节课上我遇到了麻烦

代码示例:

class Loader
{
    public $action = filter_input(INPUT_GET, "action");
    public $dir = '';
    public $exceptions = '';
    function __construct($exceptions, $dir)
    {
        if(count($exceptions) > 0){
            if(isset($exceptions[$this->action])){
                $this->req($exceptions[$this->action]);
            }else{
                $this->req($this->action);
            }
        }
        require($args[$action].".php");
    }
    public function req($this->action, $dir){
        require($dir.$action.".php");
    }
}
并且像这样使用它:

$e = array('task-list' => 'list', 'task-info' => 'info');
$loader = new Loader($e);
是否可以在带有$\u请求变量的类中定义$action?或者我应该像这样使用它:

$e = array('task-list' => 'list', 'task-info' => 'info');
$loader = new Loader($e);
$loader->action = filter_input(INPUT_GET, "action");
$loader->load();

声明属性时不能使用函数。您必须在构造函数中这样做:

class Loader
{
    public $action; // Removed it from here
    /* ... */
    function __construct($exceptions, $dir)
    {
        $this->action = filter_input(INPUT_GET, "action");
                        // ^ and placed it down here.

        /* ... */
    }

    /* ... */
}

这是一个意见问题。有些人更喜欢把超全球化放在课堂之外,有些人认为它们是语言的一部分。我总是这样处理它:如果我要为这个类编写一个测试用例,我能用我想要使用的任何测试数据轻松地初始化它吗?通常在这一点上,我遇到了任何超全局使用的问题。但是我在代码>语法错误中收到了一个错误:语法错误,意外的(‘,预期’,‘或’,‘,’在行< /代码>中定义了$动作。已执行->返回到代码->
$loader->action=foo
已执行->
$loader->load()
已执行。基本上,在构造函数运行后定义操作。将
$this->action
的用法放入
load()中
方法或将其作为参数提供给构造函数。成员属性/变量必须设置为常量值。如果需要使用函数或执行其他操作,请在构造函数中执行。阅读此