为什么我得到这个"只有变量应该通过引用传递" PHP错误?

时间:2016-02-15 06:32:53

标签: php arrays

我收到此错误: -

  

严格的标准:只应通过引用传递变量

......我不知道发生了什么事情;此代码中发生错误:

public function prepare_items() {
    $columns = $this->get_columns();
    $hidden = array();
    $sortable = $this->get_sortable_columns();
    $this->_column_headers = array($columns, $hidden, $sortable);
    $this->items = $this->flagged_message();

    usort( $this->flagged_message(), array( &$this, 'usort_reorder' ) );
    $this->items = $this->flagged_message();        

}

这一行是错误:

 usort( $this->flagged_message(), array( &$this, 'usort_reorder' ) );

flagged_message()功能是:

public function flagged_message(){
    global $wpdb;
    $improper_contents = $wpdb->get_results( $wpdb->prepare("SELECT comment_id FROM pw_commentmeta WHERE meta_key = 'flag_this_message' AND meta_value = '%d'", $this->flagged_id) );
    $flagged = [];
    if($improper_contents){
        foreach ($improper_contents as $improper_content_arr) {

        $comment_id = (int)$improper_content_arr->comment_id;
        $comment = get_comment( $comment_id );
        $comment_content = $comment->comment_content;
        $comment_author = $comment->comment_author;
        $comment_post_ID = $comment->comment_post_ID;
        $comment_date = $comment->comment_date;
        $comment_who = $comment->user_id;

        $flagged[] = array(
            "ID"                =>  $comment_id,
            "username"          =>  $comment_author,
            "flagged_message"   =>  $comment_content,
            "date"              =>  $comment_date,
        );

        }

    }
    return $flagged;
}

我不明白为什么错误被提出,有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:4)

<强> usort

bool usort ( array &$array , callable $value_compare_func )

通过引用预期数组对其进行排序,并且您将发送function作为第一个参数。那就是它。

我知道你的函数返回一个数组但是你需要将它存储在一个变量中,所以它的引用可以传递给usort。函数的返回值在其范围之外是未知的,不在另一个函数中引用而不将该值首先保存在变量中。如果usort没有通过引用预期该参数,那么您的代码就可以了。

任何按值函数调用都会接受这一点。

注意

很可能错误地将参数排列错误。因为你的第二个参数似乎也是一个错误的数组。第一个应该是array,第二个应该是callable,你可以将它们颠倒过来。但即便如此,这并不是真正如何调用usort

你的电话应该是这样的

$messages=$this->flagged_message();
usort($messages , 'usort_reorder');

答案 1 :(得分:2)

根据usort()函数引用,第一个参数将是一个数组,但是你正在发送一个函数,这会导致错误,所以改变如下: -

usort( $this->flagged_message(), array( &$this, 'usort_reorder' ) );

将其更改为: -

$message_data = $this->flagged_message(); // assign function return value to a variable
usort( $message_data,'usort_reorder'); // pass the variable to the function as first parameter. check the change in second parameter too

$message_data = $this->flagged_message(); // assign function return value to a variable
usort( $message_data,array( &$this, 'usort_reorder' ) ); // pass the variable to the function as first parameter.

注意: - 有关详细信息,请参阅手册: - http://php.net/usort

我更改了第一个示例中的第二个参数,因为第二个参数必须是valid callback function,并且您传递了一个数组(我觉得这不正确)。这就是为什么我也添加了第二个例子。尝试两个,哪一个适合你,使用那个

答案 2 :(得分:1)

尝试更改

usort( $this->flagged_message(), array( &$this, 'usort_reorder' ) );

usort( $this->flagged_message(), array( $this, 'usort_reorder' ) );
希望他的帮助。