我很好奇是否可以在PHP中动态创建对象。我以为我以前见过它。当然,我可以将它分配给一个变量,但只是想知道这是否可能。
new className()->someMethod();
当然这会引发语法错误,所以很明显它不是那样做的(如果它甚至可能)。 我应该把它分配给一个变量,因为我真的没有问题这样做我只是好奇吗?
更多细节。静态方法实际上不是一个选项,因为我试图这样做的类是PHP的ReflectionMethod类。
答案 0 :(得分:10)
这种用法在Java中很常见,但在PHP 5.3之前不可用。现在它是PHP 5.4中的一个新功能。请检查PHP 5.4 new features。用法应该是:
(new Foo)->bar()
答案 1 :(得分:1)
这仅适用于使用单例模式实例化对象的情况。如果您不知道如何实现单例模式,则必须在网络上进行搜索。但这样可行:
className::getInstance()->someMethod();
修改
如zerkms所述,工厂方法也是可能的:
class ReflectionFactory
{
public static function factory($arguments)
{
return new ReflectionClass($arguments);
}
}
// Then in your code for example
ReflectionFactory::factory()->getConstants();
答案 2 :(得分:0)
目前在php中,无法实例化新对象并在一个表达式中调用其方法。
所以显然你需要在之前将它分配给某个变量。
答案 3 :(得分:0)
您可以在类上使用静态方法,而无需将类的实例保存到变量。
class testClass{
public static function staticMethod(){
echo "Static method";
}
}
testClass::staticMethod();
答案 4 :(得分:-1)
我不知道为什么PHP不允许链接构造函数。如果你真的需要这样做,请尝试下面的必要调整。
<?php
class A {
public function b()
{
echo "a->B is called";
}
public static function factory()
{
return new self;
}
}
$a = A::factory()->b();
?>