带命名空间的Uasort不起作用

时间:2018-03-04 21:51:52

标签: php namespaces

不幸的是,我在命名空间中使用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与特定功能或任何其他解决方法一起使用?

2 个答案:

答案 0 :(得分:0)

这是一个相当愚蠢的问题,但是对于任何想出这个问题并且搜索几个小时的人,我从PHP手册评论部分找到了适用于callables的答案。

它说:

  

当尝试从位于命名空间中的函数名进行调用时,必须提供完全限定的函数名(不管当前的命名空间或使用语句)。

Link to PHP manual comment section

对于我的特定问题,答案应该是:

uasort($arr, 'Wire\selfsort');

答案 1 :(得分:0)

不确定您在这里使用命名空间,但请尝试: uasort($arr, '\Wire\selfsort');