PHP5.3中作用域解析和回调的差异

PHP5.3中作用域解析和回调的差异,php,arrays,static,callback,Php,Arrays,Static,Callback,今天在编写一些代码时,我发现下面的代码可以在5.3中使用,但不能在更早的版本中使用 <?php class Test{ public function uasort(){ $array = array( 'foo' => 'bar', 123 => 456 ); uasort( $array, 'self::uasort_callback' ); return $array; } static pri

今天在编写一些代码时,我发现下面的代码可以在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

在5.2中也可以很好地工作。

从PHP手册中关于回调的部分判断,我认为它被称为“相对静态类方法调用”。看

稍微不同的场景,但我认为调用
parent::who
self::uasort\u callback
的功能是相同的

uasort( $array, 'Test::uasort_callback' );
// 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