self 总是指向 new 关键字所声明的类;static 在静态绑定中,可以指向层级结构中的任意类。下面举一个例子。类B继承了类A的方法。对于 get_self 方法,返回的是类A本身。而static则返回的是调用者的类,也就是说,谁调用,static就指向谁。self 则持续地指向声明的类。上面的代码,我们在类 A 中使用的是 st...
因为static::class会发生错误。在对属性赋值时,只能使用非静态绑定的对象,同理 代码语言:javascript 复制 classFoo{public$name=self::class;}$Foo=newFoo;echo $Foo->name;// Foo 这样写就没错了。因为 self 引用的是类本身,调用 class 静态方法也完全行得通。 写在最后 在程序架构时这些基类的设计很关键,...
现在好像有点明白new self()和new static()的区别了。 首先,他们的区别只有在继承中才能体现出来,如果没有任何继承,那么这两者是没有区别的。 然后,new self()返回的实例是万年不变的,无论谁去调用,都返回同一个类的实例,而new static()则是由调用者决定的。 上面的$sun1->getNewCaller()的调用者是$sun...
1.new static()是在PHP5.3版本中引入的新特性。 2.无论是new static()还是new self(),都是new了一个新的对象。 3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢? 为了探究上面的问题,我们先上一段简单的代码: class Father { public function getNewFa...
1.new static()是在PHP5.3版本中引入的新特性。 2.无论是new static()还是new self(),都是new了一个新的对象。 3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢? 为了探究上面的问题,我们先上一段简单的代码: ...
而在self 和 static 的使用上,有这细微的差别。特别是类继承过程中,self 可能带来意想不到的反应,也正如那篇文章所说,建议使用 static 作为类本身的引用。 本文再来探讨,类内的 new self 与 new static 有什么区别。 学习时间 self 总是指向 new 关键字所声明的类;static 在静态绑定中,可以指向层级结构中的...
在PHP类创建过程中,self和static作为类本身的引用与类对象的引用使用上存在细微差别。尤其在类继承时,self可能带来意外结果,因此建议使用static作为类本身的引用。self总是指向new关键字声明的类,而static在静态绑定中可指向层级结构中的任意类。例如,类B继承了类A的方法,对于get_self方法,返回类A...
1.new static()是在PHP5.3版本中引入的新特性。 2.无论是new static()还是new self(),都是new了一个新的对象。 3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢? 为了探究上面的问题,我们先上一段简单的代码: ...
new static() 是在php5.3版本引入的新特性 new static 和 new self() 都是 new 一个对象 直接看代码 classFather{publicfunctiongetNewFather(){returnnewself(); }publicfunctiongetNewCaller(){returnnewstatic(); } }$f=newFather();var_dump(get_class($f->getNewFather()));// Fathervar_dump(get...
new static()是php5.3以后引入新的特性,延迟静态绑定.访问的是当前实例化的那个类,那么 static 代表的就是那个类。 new self() 是指的不是调用上下文,它指的是解析上下文. class Test { public static funtion getSelf(){ return new self(); }