首页 » SEO优化 » newselfphp技巧_PHP的new self和new static的差异

newselfphp技巧_PHP的new self和new static的差异

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

福哥在阅读一些“老外”写的PHP代码的时候创造了一些比较奇怪的语法,他们会利用self或static作为new关键字的工具名称,这个到底是什么意思啊??

2. self()

self字面意思是“自己”,那么是不是self()便是只代码所在的工具自己呢?

newselfphp技巧_PHP的new self和new static的差异 newselfphp技巧_PHP的new self和new static的差异 SEO优化

2.1 普通工具

newselfphp技巧_PHP的new self和new static的差异 newselfphp技巧_PHP的new self和new static的差异 SEO优化
(图片来自网络侵删)

2.1.1 代码

classTFUser{publicfunction__construct(bool$fromCallByFunc=false){if($fromCallByFunc){echo"福哥创建了".get_class($this)."的实例<br/>";}}publicfunctioncall_by_self(){returnnewself(true);}}classmyUserextendsTFUser{}$myUser=newmyUser();$myUser->call_by_self();

2.1.2 效果

可以看到普通工具里面self指向的是方法所属工具本身,本例中便是TFUser这个工具。

2.2 继续工具

2.2.1 代码

classTFUser{publicfunction__construct(bool$fromCallByFunc=false){if($fromCallByFunc){echo"福哥创建了".get_class($this)."的实例<br/>";}}}classmyUserextendsTFUser{publicfunctioncall_by_self(){returnnewself(true);}}$myUser=newmyUser();$myUser->call_by_self();

2.2.2 效果

可以看到继续工具里面self指向的也是方法所属工具本身,本例中便是myUser这个工具。

3. static()

static字面意思是“静态”,这个不太好理解,上代码测试一下。

3.1 普通工具

3.1.1 代码

classTFUser{publicfunction__construct(bool$fromCallByFunc=false){if($fromCallByFunc){echo"福哥创建了".get_class($this)."的实例<br/>";}}publicfunctioncall_by_static(){returnnewstatic(true);}}$myUser=newTFUser();$myUser->call_by_static();

3.1.2 效果

可以看到普通工具里面static指向的还是方法所属工具本身,本例中便是TFUser这个工具。

3.2 继续工具

3.2.1 代码

classTFUser{publicfunction__construct(bool$fromCallByFunc=false){if($fromCallByFunc){echo"福哥创建了".get_class($this)."的实例<br/>";}}}classmyUserextendsTFUser{publicfunctioncall_by_static(){returnnewstatic(true);}}$myUser=newmyUser();$myUser->call_by_static();

3.2.2 效果

可以看到继续工具里面static指向的也还是方法所属工具本身,本例中便是myUser这个工具。

4. 差异

可以创造self和static在普通工具和继续工具测试中的效果彷佛都是一样的,那么他们之间有什么差异呢?

4.1 代码

classTFUser{publicfunction__construct(bool$fromCallByFunc=false){if($fromCallByFunc){echo"福哥创建了".get_class($this)."的实例<br/>";}}publicfunctioncall_by_self(){returnnewself(true);}publicfunctioncall_by_static(){returnnewstatic(true);}}classmyUserAextendsTFUser{}classmyUserBextendsTFUser{}$myUserA=newmyUserA();$myUserA->call_by_self();$myUserA->call_by_static();$myUserB=newmyUserB();$myUserB->call_by_self();$myUserB->call_by_static();

4.2 效果

这下看明白了吧?

self在任何时候都是指向方法所属的工具本身,无论这个方法是继续调用还是直接调用。

static则指向实例化的工具本身,无论这个工具是普通工具还是继续工具。

5. 总结

看完了self和static的用法和差异之后,相信我们大家都会有一些想法了吧?

利用self可以创建工具自身的实例这个没什么可说的了,但是利用static居然可以创建继续“我”的工具的实例,这个太牛了有没有!


https://m.tongfu.net/home/35/blog/513391.html

标签:

相关文章

元旦,回顾与展望,共筑美好未来

元旦,这个象征着新的一年到来的重要节日,承载着人们对美好生活的向往与期待。回首过去,元旦见证了我国社会的飞速发展,展望未来,我们更...

SEO优化 2024-12-05 阅读0 评论0

免费建站时代来临,介绍低成本创业新选择

随着互联网的普及,越来越多的企业开始关注网络营销,而网站作为企业展示自身形象、发布信息、拓展业务的平台,其重要性不言而喻。传统的建...

SEO优化 2024-12-05 阅读0 评论0

免费级域名网站,开启网络世界的自由之门

随着互联网的快速发展,越来越多的人开始关注网络域名。域名作为网站在网络世界中的唯一标识,已经成为企业和个人展示形象、拓展业务的重要...

SEO优化 2024-12-05 阅读0 评论0