gpt4 book ai didi

php - 在实例创建时调用对象的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:38 25 4
gpt4 key购买 nike

在 PHP 中为什么我不能这样做:

class C
{
function foo() {}
}

new C()->foo();

但我必须这样做:

$v = new C();
$v->foo();

在所有语言中我都能做到...

最佳答案

从 PHP 5.4 开始

(new Foo)->bar();

在那之前,这是不可能的。见

但是你有一些选择

我无法解释的令人难以置信的丑陋解决方案:

end($_ = array(new C))->foo();

无意义的序列化/反序列化只是为了能够链接

unserialize(serialize(new C))->foo();

使用反射同样毫无意义的方法

call_user_func(array(new ReflectionClass('Utils'), 'C'))->foo();

使用函数作为工厂的更明智的方法:

// 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();

使用 Factory Method Pattern 的最明智的方法解决方案:

class C { public static function create() { return new C; } }
C::create()->foo();

关于php - 在实例创建时调用对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com