无需使用PHP进行变量赋值即可动态创建对象

时间:2011-07-04 05:06:26

标签: php class object

我很好奇是否可以在PHP中动态创建对象。我以为我以前见过它。当然,我可以将它分配给一个变量,但只是想知道这是否可能。

new className()->someMethod();

当然这会引发语法错误,所以很明显它不是那样做的(如果它甚至可能)。 我应该把它分配给一个变量,因为我真的没有问题这样做我只是好奇吗?


更多细节。静态方法实际上不是一个选项,因为我试图这样做的类是PHP的ReflectionMethod类。

5 个答案:

答案 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();
?>