不幸的是,我在命名空间中使用uasort
(或任何需要回调函数的函数)时遇到问题。
在这个脚本中,我没有使用任何类(因此没有OOP)。
我没有提出任何解决方案(声明具有回调函数的命名空间没有帮助)。
我总是收到错误(或者更确切地说是通知):PHP Warning: uasort() expects parameter 2 to be a valid callback,[...]
这是我的(简化)代码:
<?php namespace Wire;
include("../index.php");
$test[0] = "Test1";
$test[1] = "Test2";
$test[2] = "Test3";
function selfsort($a,$b){
$stats["Test1"] = 5;
$stats["Test2"] = 6;
$stats["Test3"] = 0;
if ($stats[$a]==$stats[$b]) return 0;
return ($stats[$a]<$stats[$b])?-1:1;
}
function getPrio($arr){
uasort($arr, 'selfsort');
//usort($arr, array(__NAMESPACE__, 'selfsort')); //doesn't work either:
return $arr;
}
//returns PHP Warning: uasort() expects parameter 2 to be a valid callback, function 'selfsort' not found or invalid function name in...
print_r(getPrio($test));
是否有任何可能的方法来声明我要将uasort
与特定功能或任何其他解决方法一起使用?
答案 0 :(得分:0)
这是一个相当愚蠢的问题,但是对于任何想出这个问题并且搜索几个小时的人,我从PHP手册评论部分找到了适用于callables的答案。
它说:
当尝试从位于命名空间中的函数名进行调用时,必须提供完全限定的函数名(不管当前的命名空间或使用语句)。
Link to PHP manual comment section
对于我的特定问题,答案应该是:
uasort($arr, 'Wire\selfsort');
答案 1 :(得分:0)
不确定您在这里使用命名空间,但请尝试:
uasort($arr, '\Wire\selfsort');