- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在看一个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/
我目前正在使用 phpunit 进行一些单元测试。由于存在一些 protected 方法,我不得不使用 Reflection Class 将这些方法的可见性更改为 public。 最初的方法被成功调用
我正在尝试通过反射访问/更改类的父类的属性。 如果我在子级上运行 ReflectionClass::getProperties(),它是否也会返回父级也具有的任何属性? 如果没有,有没有办法使用反射访
有没有可能在没有邪恶评估的情况下做这样的事情: var str='MyClass'; eval('new '+str); 我刚刚了解到 PHP 中有 ReflectionClass...谢谢。 最佳答
我有一个带有两个魔术方法的 TableData 类。一个是构造函数,另一个是 __call 方法。 我用下面的代码实现了调用: $class = new ReflectionClass('TableD
ReflectionClass 是在哪个版本的 PHP 中引入的? 例如: $objMetaData = new ReflectionClass('Direction'); $arrValidDire
我正在尝试从一个类中获取文档评论,对于我的一生,我不知道为什么 getDocComment() 返回 false。我期待 getDocComment 返回@Whatever。 getDocCommen
我有代码 - 工作正常(我不必包含 ReflectionClass 类): class Test { const TYPE_ONE = "Number one"; const TYPE
我在看一个tutorial处理类和对象,我遇到了这行令人困惑的代码。 Class::newInstance() 和 new Class() 有区别吗? 我阅读了文档,它似乎没有提到任何不同之处,所以我
我正在创建一个新的 ReflectionClass,然后将 protected 属性 _products 设置为可访问。它总是返回 null 我在这里做错了吗?我在5.4.11 $project =
我是一名优秀的程序员,十分优秀!