PHP中new static()与new self()的比较
今天在coding的时候,发现了newstatic(),觉得实例化的地方不是应该是newself()吗?查询了一下才知道两者的区别:
1)在有子类集成的时候,两者的表现不一样
2)php5.2及以下的版本不支持newstatic()的语法
简单通俗的来说,self就是写在哪个类里面,实际调用的就是这个类.所谓的后期静态绑定,static代表使用的这个类,就是你在父类里写的static,
然后通过子类直接/间接用到了这个static,这个static指的就是这个子类,所以说static和$this很像,但是static可以用于静态方法和属性等.
具体解释如下:
self-就是这个类,是代码段里面的这个类。
static-PHP5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么static代表的就是那个类。
还是看看老外的专业解释吧:
selfreferstothesameclasswhosemethodthenewoperationtakesplacein.
staticinPHP5.3'slatestaticbindingsreferstowhateverclassinthehierarchywhichyoucallthemethodon.
Inthefollowingexample,BinheritsbothmethodsfromA.selfisboundtoAbecauseit'sdefinedinA'simplementationofthefirstmethod,whereasstaticisboundtothecalledclass(alsoseeget_called_class()).
上代码:
classPerson{ publicstaticfunctionget_self(){ returnnewself(); } publicstaticfunctionget_static(){ returnnewstatic(); } } classWangBaoqiangextendsPerson{} echoget_class(WangBaoqiang::get_self());//Person echoget_class(WangBaoqiang::get_static());//WangBaoqiang echoget_class(Person::get_static());//Person
但是如果想让子类使用get_class时,返回的也是当前子类的名称('wangbaoqiang'),该怎么做呢。
<?php classPerson{ publicfunctioncreate1(){ $class=get_class($this); returnnew$class(); } publicfunctioncreate2(){ returnnewstatic(); } } classWangBaoqiangextendsPerson{ } $wangBaoQiang=newWangBaoqiang(); var_dump(get_class($wangBaoQiang->create1()),get_class($wangBaoQiang->create2())); /* Theresult string(1)"WangBaoqiang" string(1)"WangBaoqiang" */
以上所述是小编给大家介绍的PHP中newstatic()与newself()的比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!