php里new self() 一般在類內部使用,作用是對自身類實例化,搞不明白干嘛要弄這么個方法,弄個實例加深下大家對這個東東的理解

class test{

public function __construct(){

echo 'hello';

}

public function test2(){

new self();

}

}

test::test2();

這個實例會輸出hello

后邊發現還有個new static()方法,那這個跟new self()有什么區別呢,看代碼說話:

class fa {

public function getfa1() {

return new self();

}

public function getfa2() {

return new static();

}

}

$f = new fa();

print get_class($f->getfa1());

echo '

';

print get_class($f->getfa2());

get_class()方法是用於獲取實例所屬的類名

輸出:

fa

fa兩個輸出都一樣,感覺沒啥區別呀,后邊突發奇想繼承下再看看

class er1 extends fa {

}

class er2 extends fa {

}

$er1 = new er1();

$er2 = new er2();

print get_class($er1->getfa1());

echo '
';

print get_class($er1->getfa2());

echo '
';

print get_class($er2->getfa1());

echo '
';

print get_class($er2->getfa2());

輸出:

fa

er1

fa

er2

現在輸出不一樣了,明白new self()與new static()的區別了,只有在繼承中才能體現出來,如果沒有任何繼承,那么這兩者是沒有區別的,在繼承中new self()返回的實例是自己所在的那個類,不管誰調用都是不變的,new static()是由調用者決定的

最新文章

  1. win10下安装PHP_CodeSniffer 检查编码规范
  2. 从Uboot到Linux技术
  3. 如何用ABAP代码的方式弹出SPRO里的customizing activity
  4. ci Call to undefined function site_url()
  5. c语言输出去掉最后一行回车,新人提问:如何将输出时每行最后一个空格删除...
  6. P2294 [HNOI2005]狡猾的商人
  7. 【bfs】WZK旅游(jzoj 1996)
  8. 送书|science-组合图表绘制
  9. 夏季晨练不得早于6点 - 生活至上,美容至尚!
  10. BAT运维系统Client设计探秘
  11. linux 必知命令
  12. windows系统: 解决ie谷歌浏览器证书错误.2021-05-27
  13. 第十三章 RememberMe——《跟我学Shiro》[张开涛]
  14. Linux如何测试USB硬盘的读写速度
  15. 写给产品经理的第4封信:关于产品经理的十万个为什么?你为什么要做产品经理?
  16. 三幅图弄懂EventBus核心原理
  17. Java JPG转TIF文件过大的解决方案(单张解决方案,多张可看以下参考链接)
  18. 2014 年放弃阿里巴巴offer 的人是否格外多?如果是,为什么?
  19. 深脑链打地基,人工智能建高楼:DBC和AI的不解之缘
  20. JavScript简介

热门文章

  1. NodeJs连接Mysql数据库
  2. [raspberry pi3] 串口线使用
  3. Linux安装pear包
  4. oracle数据库从入门到精通之三
  5. Modernizr.js-检测浏览器对HTML5和CSS3的支持程度
  6. 90. Subsets II 1
  7. Linux代理服务器与防火墙安装与应用
  8. C++中#ifndef/#define/#endif使用详解
  9. HDUOJ-2094-产生冠军
  10. NYOJ 864 统计