我正在看一个处理类和对象的tutorial,我遇到了令人困惑的这行代码。
Class::newInstance()
和new Class()
之间是否存在差异?
我阅读了文档,它似乎没有提到任何不同之处,所以我认为它是一样的?
答案 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