gpt4 book ai didi

php - PHP 5.3 中范围解析和回调的差异

转载 作者:搜寻专家 更新时间:2023-10-31 21:17:43 25 4
gpt4 key购买 nike

今天在处理一些代码时,我发现以下代码可以在 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 手册中有关回调的部分判断,我认为它称为“相对静态类方法调用”。请参阅 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 的能力是一样的。

关于php - PHP 5.3 中范围解析和回调的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com