PHP中newstatic()和newself()的区别介绍
长夜漫漫啊!
今天领导本地搭建一个站。发现用PHP5.2搭建不起来,站PHP代码里面有很多5.3以上的部分,领导让苦逼我更改在5.2下能运行。
改着改着发现了一个地方
returnnewstatic($val);
这尼玛是神马,只见过
returnnewself($val);
于是上网查了下,他们两个的区别。
self?就是这个类,是代码段里面的这个类。
static?PHP5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么static代表的就是那个类。
还是看看老外的专业解释吧。
selfreferstothesameclasswhosemethodthenewoperationtakesplacein.
staticinPHP5.3"slatestaticbindingsreferstowhateverclassinthehierarchywhichyoucallthemethodon.
Inthefollowingexample,BinheritsbothmethodsfromA.selfisboundtoAbecauseit"sdefinedinA‘simplementationofthefirstmethod,whereasstaticisboundtothecalledclass(alsosee get_called_class()).
classA{
publicstaticfunctionget_self(){
returnnewself();
}
publicstaticfunctionget_static(){
returnnewstatic();
}
}
classBextendsA{}
echoget_class(B::get_self()); //A
echoget_class(B::get_static());//B
echoget_class(A::get_static());//A
这个例子基本上一看就懂了吧。
原理了解了,但是问题还没有解决,如何解决掉returnnewstatic($val);这个问题呢?
其实也简单就是用get_class($this);如下
classA{
publicfunctioncreate1(){
$class=get_class($this);
returnnew$class();
}
publicfunctioncreate2(){
returnnewstatic();
}
}
classBextendsA{
}
$b=newB();
var_dump(get_class($b->create1()),get_class($b->create2()));
/*
Theresult
string(1)"B"
string(1)"B"
*/
相关文章
- Linux中为已经编译安装后的PHP安装扩展详解
- PHP助力MySQL实现程序开发梦想(php支持mysql)
- 快速访问MSSQL数据库:PHP实现(php访问mssql)
- Linux环境下,如何高效、简单地编写PHP代码(linux下写php)
- 如何使用PHP重启Linux服务:简易教程(php重启linux服务)
- 构建LAMP环境 以增加PHP的MSSQL扩展(增加php扩展mssql)
- PHP暂不支持MSSQL数据库的连接(php不支持mssql)
- PHP与MSSQL结合,实现灵活高效的程序开发(php mssql 程序)
- PHP与MySQL:兼容性更好、更强大的灵活性(php与mysql 优点)
- 一步一步学习PHP(4)php函数补充2
- example2.php
- PHP和Mysqlweb应用开发核心技术-第1部分Php基础-2php语言介绍
- php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
- PHP图片处理类phpThumb参数用法介绍
- php数据结构与算法(PHP描述)快速排序quicksort
- php.ini-dist和php.ini-recommended的区别介绍(方便开发与安全的朋友)
- PHP输入流php://input介绍
- PHP中数字检测is_numeric与ctype_digit的区别介绍
- 使用PHP+JQuery+Ajax分页的实现
- 基于PHP常用函数的用法详解
- php-perl哈希算法实现(times33哈希算法)
- PHP数据库万能引擎类adodb配置使用以及实例集锦
- PHP简单实现“相关文章推荐”功能的方法
- SELinux导致PHP连接MySQL异常Can'tconnecttoMySQLserver的解决方法