msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

23 Sep 11 我对PHP5.4的一个改进

插播个消息, 今天, 我终于获得了Zend的维护权限, Zend是PHP源代码中最为核心的部分, 也是最为敏感的地方, 对于这部分的权限控制的一直很严格. 但也是我加入PHP开发组以后, 一直想得到的权限. :)

好了, 言归正传, 今天对PHP5.4的Zend引擎做了一个改进, 改进了参数不兼容的报警信息. 具体的来说:

对于如下的例子:

<?php
class Sub implements ArrayAccess {
    public function offsetSet() {
    }
}
?>

在目前大家一定会得到类似如下的错误信息:

PHP Fatal error:  Declaration of Sub::offsetSet() must be compatible
with that of ArrayAccess::offsetSet()

这里有个问题, 错误信息并没有告诉我们, 正确的参数应该是什么样子, 我们除了去查手册(或者看源代码), 没办法得知.

于是, 在开发组经过提议, 讨论之后, 我今天做了一个改进, 改进之后, 将会得到如下的错误信息:

Fatal error: Declaration of Sub::offsetSet() must be compatible with
ArrayAccess::offsetSet($offset, $value)

当然, 这个对用户自定的类也是有效的, 如下:

<?php
class Foo {
}

Abstract Class Base {
    abstract public function test(Foo $foo, array $bar,
              $option = NULL, $extra = 16777215) ;
}

class Sub extends Base {
    public function test(Foo $foo, array $bar) {
    }
}
?>

将会得到如下的错误信息:

PHP Fatal error:  Declaration of Sub::test() must be compatible with
Base::test(Foo $foo, array $bar, $option = NULL, $extra = 16777215)

reversion: http://svn.php.net/viewvc?view=revision&revision=317206


分享到:



Related Posts:

Tags: , , , ,

35 Responses to “我对PHP5.4的一个改进”

  1. 林正英 |

    这个改动我们没必要去理解吧

  2. FxYCarl |

    PHP5.4好像重写了php_output.h吧,原来的OG的结构体变化了,貌似OG里没有php_body_write这些成员了吧,那还怎么hack OG(php_body_write) 来获得zend_execute之后的结果呢.

  3. seven |

    希望能夠改進一下錯誤捕捉的部份,其實js在這方面就很強.
    另外php啥時候能做win32或智慧型手機的程式啊?

  4. imsuper |

    鸟哥威武!

  5. 硬密封蝶阀 |

    一直支持你的。。。

  6. 我对PHP5.4的一个改进树林/咖啡 成都专业php网站制作 | 树林/咖啡 成都专业php网站制作 |

    [...] 风雪之隅 » PHP源码分析 Posted in: php / Tagged: 我对PHP5.4的一个改进 [...]

  7. pitaya |

    碉堡

  8. Yaseng |

    只能膜拜了

  9. phenix |

    向您学习。

  10. hop-pocket |

    改进 不错

  11. PHPer |

    崇拜一下你呗,向你学习

  12. Kyli |

    基本上PHP里你是我的偶像了

  13. funlake |

    这算是小试牛刀。
    好戏应还在后头。
    鼓掌!

  14. joysk |

    表示对大牛的膜拜一下!
    哈哈

  15. rainkid |

    我去http://pecl.php.net/package/yaf下载了最新的版本
    重新编译OK了,非常感谢!

  16. rainkid |

    php-config -v
    显示的版本是:5.3.5-1ubuntu7.2

  17. rainkid |

    这个应该不会,我下了5.3.6的源码在看,但没有编译过,本地安装的了5.3.5的,我找了一下phpize和php-config都只有一个,应该不存在您说的问题。

  18. 雪候鸟 |

    @rainkid 没道理啊, 代码中对于5.3以上都会注释掉getPrevious的逻辑, 你是不是编译的时候, 用错了phpize和php-config?

  19. rainkid |

    补充一下,我的系统是ubuntu 64bit

  20. rainkid |

    我的PHP version 是 5.3.5

  21. 雪候鸟 |

    @rainkid 你的PHP版本是?

  22. rainkid |

    这个问题好像找到了,是之前安装你的yaf框架,我去掉这个扩展就没有这个错误了,我这已经更新到最新版本了,楼主帮忙看看

  23. rainkid |

    恭喜恭喜,我的环境下面一直报这个错误,但不知道是什么问题,laruence能帮忙看一下么
    PHP Fatal error: Cannot override final method Exception::getPrevious() in Unknown on line 0

  24. PHP正则之递归匹配 | love googlereader |

    [...] 我对PHP5.4的一个改进 [...]

  25. wclssdn |

    @xLight 很久以前就支持了吧- -. 5.0以后?
    嗯. 不错~~ 有了这个提示还是蛮人性化的…. 能省好多键盘鼠标… (脾气不好的程序员总砸键盘…. 或者摔鼠标….

  26. asy |

    我的偶象,支持国产PHPER

  27. 神仙 |

    这个很实在

  28. 怪物宝 |

    厉害啊,佩服

  29. 小牛哥 |

    非常好,很厉害啊。

  30. 傻子日志 |

    [...] 我对PHP5.4的一个改进 [...]

  31. 戴韬_雪心 |

    5.3就已经支持指定传入参数变量的类型了……很隐蔽的方式,嗯

  32. xLight |

    如果我没理解错,看来5.4已经支持指定传入参数变量的类型了啊。
    good news

  33. kernel |

    加上这功能吧 https://bugs.php.net/bug.php?id=34392

  34. 林绍强 |

    支持,中国phper的骄傲

  35. lanisle |

    群管比群主给力多了,摸泄天天没正经的~

Leave a Reply

*