PHP5.3中作用域解析和回调的差异
今天在编写一些代码时,我发现下面的代码可以在5.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
<?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