Press "Enter" to skip to content

函数类型提示(Callable typehint)

在PHP5.4的开发过程中, 有不少对typehint的提议, 我们也讨论过很多次, 完全加入对基本类型的typehint会引起很大的变动, 并且就我自己来看, 不利于PHP的灵活性.
不过, 对于callable类型的支持, 我还是支持的.
在以前, 我们如果希望一个函数接受一个回调函数作为参数, 那需要做很多额外的工作来检查是否是可调用的, 正确的回调函数.
而现在, 这个将会变得很简单, Zend Engine提供了一个新的typehint, 来帮助你完成这些检查工作:

<?php
   function foo(callable $callback) {
   }

对于下面的例子:

<?php
foo("false"); //Catchable fatal error:  Argument 1 passed to foo() must be callable *
foo("printf"); //okey
foo(function(){}); //okey
class A {
    static function show() {
    }
}
foo(array("A", "show")); //okey

是不是方便了很多呢?
另外, 对于扩展开发来说, zend_parse_parameters也提供了对应的新标志:"f", 可以参看Zend Parameters Parser新增类型描述符介绍
不过还是要提醒下, PHP 5.4还处于开发阶段, 在最终release之前, 任何新特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
更多更新信息, 请关注: Changelog

6 Comments

  1. chrisyue
    chrisyue July 27, 2012

    不知道为什么会觉得加了基本类型的typehint会不利于php的灵活性。
    如果php支持基本类型的typehint,就可以少好多类似
    if (is_int($foo)) {
    throw new ParamException(…);
    // or trigger_error(…);
    }
    这样的代码了不是吗

  2. Anonymous
    Anonymous March 30, 2012

    听说 到新浪微博了?

  3. xiatian
    xiatian November 17, 2011

    喜欢各种回调风格

  4. xiatian
    xiatian November 17, 2011

    喜欢各种回调风格

  5. istrone
    istrone October 10, 2011

    和js挺像了!

  6. vt
    vt October 10, 2011

    如果能直接用
    foo(“A->show”); //okey
    就更好了 🙂

Comments are closed.