sup*_*san 6 php oop reference static-members laravel
我正在尝试访问另一个类中的ActiveModel类的静态类成员.
$class = "\ActiveModel\User";
$class::create(); //WORKS!
$this->class = "\ActiveModel\User";
$this->class::create(); //DOESN'T WORK :( - Throws "Incorrect access to static class member" error
Run Code Online (Sandbox Code Playgroud)
使用它的正确方法是什么$this->var?
另一个例子:

小智 5
PHP语言禁止这种构造。还有其他例子。(例如,以前,您无法直接访问函数返回的数组)
$elem = get_array()[0] // Doesn't work until PHP 5.4.0
Run Code Online (Sandbox Code Playgroud)
这些限制背后的主要原因是解析器不喜欢它。因为它们很复杂,或者引起歧义,或者他们想保留这种结构以备将来使用。
您可以通过分配一个临时变量来解决此限制:
$className = $this->class;
$className::create(); // This will work.
Run Code Online (Sandbox Code Playgroud)
因为PHP不支持这种评估5.6.2之前(似乎新版本仍然不支持它)。
如果你确实无论如何都必须这样做,请使用call_user_func()或call_user_func_array()像这样:
call_user_func_array(
array(
$this->modalClassName,
'create'
),
array()
);
Run Code Online (Sandbox Code Playgroud)
setHasMany并使用以下方法为您的模态类添加方法
call_user_func_array(
array(
$this->modalClassName,
'setHasMany'
),
array(['user_level'])
);
Run Code Online (Sandbox Code Playgroud)
而不是直接设置$hasmany变量。
但我不会推荐它。对于这种情况,您可以尝试诸如依赖注入之类的方法。