新的Class()和ReflectionClass :: newInstance()之间的区别?

时间:2016-06-27 18:23:50

标签: php

我正在看一个处理类和对象的tutorial,我遇到了令人困惑的这行代码。

Class::newInstance()new Class()之间是否存在差异?

我阅读了文档,它似乎没有提到任何不同之处,所以我认为它是一样的?

1 个答案:

答案 0 :(得分:1)

new Class()语句创建了一个名为Class的类的新对象实例。

Class::newInstance()在名为static的类上调用Class方法。在您的教程中,大多数人会调用并返回new Class()。 静态函数newInstance需要存在于类中。它不是所有php对象的原生。

这应该说清楚:

class Foo
{
    private $bar = null;

    public static function newInstance($args){
        return new self($args);
    }

    public function __construct($bar = "nothing")
    {
        $this->bar = $bar;
    }

    public function foo()
    {
        echo "Foo says:" . $this->bar . "\n";
    }
}

//create using normal new Classname Syntax
$foo1 = new Foo("me");
$foo1->foo();

//create using ReflectionClass::newInstance
$rf   = new ReflectionClass('Foo');
$foo2 = $rf->newInstance();
$foo2->foo();

//create using refelction and arguments
$foo3= $rf->newInstanceArgs(["happy"]);
$foo3->foo();

//create using static function 
$foo4 = Foo::newInstance("static");
$foo4->foo();

将输出:

Foo says:me
Foo says:nothing
Foo says:happy
Foo says:static