使用PHP动态创建对象,无需变量赋值
我只是好奇,在PHP中是否可以动态创建对象。我还以为我以前看过呢。当然,我可以把它赋给一个变量,但我想知道这是否可能使用PHP动态创建对象,无需变量赋值,php,class,object,Php,Class,Object,我只是好奇,在PHP中是否可以动态创建对象。我还以为我以前看过呢。当然,我可以把它赋给一个变量,但我想知道这是否可能 new className()->someMethod(); 当然,这会抛出一个语法错误,所以显然不是这样做的(如果可能的话)。 我应该把它分配给一个变量吗?因为我真的没有问题,我只是好奇而已 只是一些进一步的细节。静态方法并不是一个真正的选项,因为我尝试为其执行此操作的类是PHPs ReflectionMethod类。这仅在使用单例模式实例化对象时有效。如果您不知道如
new className()->someMethod();
当然,这会抛出一个语法错误,所以显然不是这样做的(如果可能的话)。
我应该把它分配给一个变量吗?因为我真的没有问题,我只是好奇而已
只是一些进一步的细节。静态方法并不是一个真正的选项,因为我尝试为其执行此操作的类是PHPs ReflectionMethod类。这仅在使用单例模式实例化对象时有效。如果您不知道如何实现singleton模式,则必须在web上搜索。但这样做是可行的:
className::getInstance()->someMethod();
编辑
正如zerkms所述,工厂方法也是可行的:
class ReflectionFactory
{
public static function factory($arguments)
{
return new ReflectionClass($arguments);
}
}
// Then in your code for example
ReflectionFactory::factory()->getConstants();
目前在php中,不可能在一个表达式中实例化新对象并调用其方法
因此,显然您需要在之前将其分配给某个变量。您可以在类上使用静态方法,而无需将类的实例保存到变量
class testClass{
public static function staticMethod(){
echo "Static method";
}
}
testClass::staticMethod();
我不知道为什么PHP不允许构造函数链接。如果您真的需要这样做,请尝试以下类似的方法,并进行必要的调整
<?php
class A {
public function b()
{
echo "a->B is called";
}
public static function factory()
{
return new self;
}
}
$a = A::factory()->b();
?>
这种用法在Java中很常见,但在PHP5.3之前是不可用的。现在它是PHP5.4中的一个新特性。请查收。其用法应为:
(new Foo)->bar()
您是否尝试过
(new className())->someMethod()代码>?是的,它也不是那样工作的,jerluc。可能是重复的,谢谢Gordon,我在找的时候找不到任何东西,我的标题好多了。;)+1这将是首选方法。但这只有在假设单例适合OP的情况下才是正确的。这种方法很好,但不可能,因为我正在尝试对PHPs ReflectionMethod类执行此操作。@jerluc:如果不合适,那么工厂可以替换它;-)-1因为单例几乎从来都不是一个好的解决方案,在这里它肯定不是正确的解决方案,因为OP不希望在每个请求上获得相同的实例,也不希望对所述实例进行全局访问。我将继续并选择此作为唯一合适的方法。工厂的路很方便。然而,这并不是我问题的答案,主要是因为我认为我的问题还不能得到正确的回答。哦,好吧,谢谢你们的帮助。哦,好吧,值得一试。:)太神了无需为每个类编写create()
!