Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP动态创建对象,无需变量赋值_Php_Class_Object - Fatal编程技术网

使用PHP动态创建对象,无需变量赋值

使用PHP动态创建对象,无需变量赋值,php,class,object,Php,Class,Object,我只是好奇,在PHP中是否可以动态创建对象。我还以为我以前看过呢。当然,我可以把它赋给一个变量,但我想知道这是否可能 new className()->someMethod(); 当然,这会抛出一个语法错误,所以显然不是这样做的(如果可能的话)。 我应该把它分配给一个变量吗?因为我真的没有问题,我只是好奇而已 只是一些进一步的细节。静态方法并不是一个真正的选项,因为我尝试为其执行此操作的类是PHPs ReflectionMethod类。这仅在使用单例模式实例化对象时有效。如果您不知道如

我只是好奇,在PHP中是否可以动态创建对象。我还以为我以前看过呢。当然,我可以把它赋给一个变量,但我想知道这是否可能

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