- 论坛徽章:
- 0
|
本帖最后由 hightman 于 2010-10-30 23:43 编辑
直接看代码吧,以下代码预期应该是输出 2,3,4 的 value 但,事与原违。。。(环境 php5.3.3)
- <?php
- class bar
- {
- public $value = 0;
- function &ins() {
- if (!isset($this))
- {
- $obj = new bar;
- $obj->value = 1;
- return $obj;
- }
- return $this;
- }
- public function __toString() {
- return "value is: $this->value\n";
- }
- }
- function foo()
- {
- static $obj = null;
- if (is_null($obj)) {
- $obj = &bar::ins();
- }
- $obj->value++;
- echo $obj;
- }
- foo();
- foo();
- foo();
复制代码 早期PHP4对像返回会变成拷贝,所以通过函数定义及调用时加&来作引用,不过PHP5开始就改变了,对像在函数返回值或各种赋值时均指向同一实例。
结果今天在弄一个旧代码时发现这个用法反而导致了大问题,原本 static 的预期效果不见了。 |
|