【问题标题】:Differences in scope resolution and callbacks in PHP 5.3PHP 5.3 中范围解析和回调的差异
【发布时间】:2011-02-14 23:40:43
【问题描述】:

今天在处理一些代码时,我发现以下代码可以在 5.3 中使用,但在更早的版本中不行。

<?php

class Test{
    public function uasort(){
        $array = array( 'foo' => 'bar', 123 => 456 );
        uasort( $array, 'self::uasort_callback' );

        return $array;
    }

    static private function uasort_callback( $a, $b ){
        return 1;
    }
}

$Test = new Test;
var_dump( $Test->uasort() );

// version 5.3.2  - works fine
// version 5.2.13 - Fatal error: Cannot call method self::uasort_callback() or method does not exist

只是好奇这个功能叫什么,以及它是否被认为是好的、坏的(或草率的)实践,因为将其更改为

uasort( $array, 'Test::uasort_callback' );

在 5.2 中也可以正常工作。

【问题讨论】:

    标签: php arrays static callback


    【解决方案1】:

    从 PHP 手册中关于回调的部分来看,我会说它被称为“相对静态类方法调用”。见http://php.net/manual/en/language.pseudo-types.php(死链接)

    // Type 4: Static class method call (As of PHP 5.2.3)
    call_user_func('MyClass::myCallbackMethod');
    
    // Type 5: Relative static class method call (As of PHP 5.3.0)
    class A {
        public static function who() {
            echo "A\n";
        }
    }
    
    class B extends A {
        public static function who() {
            echo "B\n";
        }
    }
    
    call_user_func(array('B', 'parent::who')); // A
    

    场景略有不同,但我认为调用parent::whoself::uasort_callback 的能力是一回事。

    【讨论】:

      猜你喜欢
      • 2014-03-09
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多