PHP中new static()与new self()的区别
来源:互联网 发布:pixiv软件怎么注册 编辑:程序博客网 时间:2024/05/16 12:47
本文实例讲述了PHP中new static()与new self()的区别异同,相信对于大家学习PHP程序设计能够带来一定的帮助。
问题的起因是本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,要求更改在5.2下能运行。
于是上网查了下,他们两个的区别。
self - 就是这个类,是代码段里面的这个类。
原理了解了,但是问题还没有解决,如何解决掉 return new static($val); 这个问题呢?
其实也简单就是用 get_class($this); 代码如下:
问题的起因是本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,要求更改在5.2下能运行。
改着改着发现了一个地方
<pre name="code" class="php">return new static($val);这尼玛是神马,只见过
return new self($val);
于是上网查了下,他们两个的区别。
self - 就是这个类,是代码段里面的这个类。
static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); }} class B extends A {} echo get_class(B::get_self()); // Aecho get_class(B::get_static()); // Becho get_class(A::get_static()); // A这个例子基本上一看就懂了吧。
原理了解了,但是问题还没有解决,如何解决掉 return new static($val); 这个问题呢?
其实也简单就是用 get_class($this); 代码如下:
class A { public function create1() { $class = get_class($this); return new $class(); } public function create2() { return new static(); }} class B extends A { } $b = new B();var_dump(get_class($b->create1()), get_class($b->create2())); /*The result string(1) "B"string(1) "B"*/
0 0
- PHP中new static()与new self()的区别
- PHP中new static()与new self()的区别
- PHP中new static()与new self()
- PHP中new static() 和 new self() 的区别
- PHP中new self()和new static()的区别探究
- PHP中new self()和new static()的区别
- PHP 中 new static 和 new self 的区别
- new self 与 new static 的区别
- new self() 与new static()的区别
- PHP中new static()与new self()的区别异同分析
- PHP中new static()与new self()的区别异同分析
- PHP中new static()与new self()的区别异同分析
- PHP中new static()与new self()的区别异同分析
- PHP中new static()与new self()的区别及5.2版本重写5.3
- PHP中new static()与new self()的区别异同分析
- 【PHP趣味】new self和new static的区别
- PHP中new static() 和 new self()
- PHP的self::与static::,new self()和new static()之分
- nuciebwebhjd12ew
- mybatis匹配方法返回NULL导致报错
- 牛人博客汇总之摘抄二
- Jmeter 获取并引用jsessionid
- Android属性allowBackup安全风险浅析
- PHP中new static()与new self()的区别
- hdu3787 A+B (字符串的处理)
- Ubuntu 12.04如何在启动时默认进入图形界面
- 2012年5月SAT香港真题解析
- .NET开发者必备的工具箱
- Android异步任务处理框架AsyncTask源码分析
- 微信支付
- 提醒自己每次写代码都应该记住的一些点(更新中...)
- 关于Xcode导入文件夹的2种选择