gpt4 book ai didi

php - new Class() 和 ReflectionClass::newInstance() 的区别?

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:03 24 4
gpt4 key购买 nike

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

Class::newInstance()new Class() 有区别吗?

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

最佳答案

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

Class::newInstance() 在名为Class 的类上调用static 方法。在您的教程中,最有可能调用并返回 new Class()。静态函数 newInstance 需要出现在类中。它不是所有 php 对象 afaik 的 native 。

这应该说清楚:

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

关于php - new Class() 和 ReflectionClass::newInstance() 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38060717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com