在PHP中为什么我不能这样做:
class C
{
function foo() {}
}
new C()->foo();
Run Code Online (Sandbox Code Playgroud)
但我必须这样做:
$v = new C();
$v->foo();
Run Code Online (Sandbox Code Playgroud)
在所有语言中,我都能做到......
Gor*_*don 16
从PHP 5.4开始,你可以做到
(new Foo)->bar();
Run Code Online (Sandbox Code Playgroud)
在此之前,这是不可能的.看到
但是你有一些替代方案
令人难以置信的难看的解决方案我无法解释:
end($_ = array(new C))->foo();
Run Code Online (Sandbox Code Playgroud)
无意义的Serialize/Unserialize只是为了能够链接
unserialize(serialize(new C))->foo();
Run Code Online (Sandbox Code Playgroud)
使用Reflection的同样无意义的方法
call_user_func(array(new ReflectionClass('Utils'), 'C'))->foo();
Run Code Online (Sandbox Code Playgroud)
使用函数作为工厂的更合理的方法:
// global function
function Factory($klass) { return new $klass; }
Factory('C')->foo()
// Lambda PHP < 5.3
$Factory = create_function('$klass', 'return new $klass;');
$Factory('C')->foo();
// Lambda PHP > 5.3
$Factory = function($klass) { return new $klass };
$Factory('C')->foo();
Run Code Online (Sandbox Code Playgroud)
使用工厂方法模式解决方案最理智的方法:
class C { public static function create() { return new C; } }
C::create()->foo();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1637 次 |
| 最近记录: |