我试图使用usort调用函数,但是我得到一个错误,即该类没有方法。
$awards = usort ($q->posts, array($this, '_mt_latest_award_sort'));
目前设置
namespace Test\Theme
class Shortcodes extends Theme
{
...
//this is the function I am trying to call on
function _mt_latest_award_sort($value1, $value2)
{
...
//code to do the sorting
...
}
...
$awards = usort ($q->posts, array($this, '_mt_latest_award_sort');
...
}
当我改变引用我的"奖励"功能
$awards = usort ($q->posts, array($this, 'awards'));
它抛出了一个错误,即公共奖励函数中的函数已经被声明。
如何正确指向_mt_latest_award_sort函数?
答案 0 :(得分:1)
你的函数在另一个函数中,试着在类中声明你的函数
例如:
class C
{
public function Fa()
{
function Fc()
{
...
}
...
$this->Fb(); // it works C::Fb is a function
$this->Fc(); // it doesn't work, there is no C::Fc function
...
}
function Fb()
{
...
}
}
答案 1 :(得分:0)
PHP不支持嵌套函数。
这是一个常见的错误/误解,因为下面的代码似乎有效:
function foo() {
function bar() {
echo 'Hello!';
}
bar();
bar();
bar();
}
但是,这实际上并不是定义嵌套函数,它只是在运行bar
时定义全局函数foo()
。你可以通过运行foo()
两次来测试这一点 - 第一次,function bar
将被定义,然后运行3次;第二次,你会收到一个致命错误,因为你试图两次定义同一个函数。
您需要将您的函数定义为类的单独方法:
class Shortcodes extends Theme
{
public function awards()
{
...
$awards = usort($q->posts, array($this, '_mt_latest_award_sort'));
...
}
private function _mt_latest_award_sort($value1, $value2)
{
...
//code to do the sorting
...
}
}
或者,使用anonymous function:
class Shortcodes extends Theme
{
public function awards()
{
...
$awards = usort ($q->posts, function($value1, $value2)
{
...
//code to do the sorting
...
});
...
}
}
答案 2 :(得分:0)
当方法"奖励"被调用,尝试声明函数" _mt_latest_award_sort"。
使用$awards = usort ($q->posts, array($this, '_mt_latest_award_sort');
实现,这也会以同样的方式失败:
$shortcode = new Shorcodes;
$shortcode->awards(); // "_mt_latest_award_sort" is declared
$shortcode->awards(); // attempted to redeclare "_mt_latest_award_sort"
仅仅因为您在另一个函数中声明了一个命名函数,并不意味着它的范围不是全局的。
这可以解决您的问题:
class Shortcodes extends Theme
{
private $posts = array();
// ...
private function _mt_latest_award_sort($value1, $value2) {
// ...
}
public function awards()
{
// ...
$awards = usort($this->posts, array($this, '_mt_latest_award_sort'));
// ...
}
}
您还可以使用匿名函数:
$awards = usort($this->posts, function($value1, $value2) {
// ...
});