Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 严格标准:不应静态调用非静态方法StreamComment::getCommentsHTML(),假设$this来自不兼容的上下文_Php_Joomla_Static - Fatal编程技术网

Php 严格标准:不应静态调用非静态方法StreamComment::getCommentsHTML(),假设$this来自不兼容的上下文

Php 严格标准:不应静态调用非静态方法StreamComment::getCommentsHTML(),假设$this来自不兼容的上下文,php,joomla,static,Php,Joomla,Static,我正在使用Offiria(基于joomla的社交网络脚本),当我点击链接“显示所有评论”查看链接下的所有已发布评论时,我在第一条评论的正上方出现以下错误。该函数可以使所有注释展开,我可以看到所有注释,但错误也存在 严格标准:非静态方法StreamComment::getCommentsHTML() 不应静态调用,假设$this来自不兼容 C:\程序中的上下文 Files\Ampps\www\officeria\components\com\u stream\controllers\comment

我正在使用Offiria(基于joomla的社交网络脚本),当我点击链接“显示所有评论”查看链接下的所有已发布评论时,我在第一条评论的正上方出现以下错误。该函数可以使所有注释展开,我可以看到所有注释,但错误也存在

严格标准:非静态方法StreamComment::getCommentsHTML() 不应静态调用,假设$this来自不兼容 C:\程序中的上下文 Files\Ampps\www\officeria\components\com\u stream\controllers\comment.php 第31行

下面是comment.php文件中的第31行:

public function  showall()
{
    $stream_id = JRequest::getVar('message_id');
    $html = StreamComment::getCommentsHTML($stream_id);
    header('Content-Type: text/html; charset=UTF-8');
    echo $html;
    exit;
}
我已尝试禁用php.ini中的所有错误报告选项,但错误不断出现。我还尝试将上述代码更改为“publicstaticfunctionshowall()”,但我得到一个错误,即严格标准:不应静态调用非静态方法StreamComment::getCommentsHTML()

我将感谢任何人在此之前的帮助

这里是完整的注释。php

<?php
/**
 * @version     1.0.0
 * @package     com_administrator
 * @copyright   Copyright (C) 2011 - 2013 Slashes & Dots Sdn Bhd. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 * @author      Offiria Team
 */

// No direct access.
defined('_JEXEC') or die;

jimport('joomla.application.controller');

class StreamControllerComment extends JController
{
    /**
     *
     */     
    public function display($cachable = false, $urlparams = false){
        parent::display( null );
    }


    /**
     *  Return HTML of all
     */     
    /**public function  showall()
    {
        $stream_id = JRequest::getVar('message_id');
        $html = StreamComment::getCommentsHTML($stream_id);
        header('Content-Type: text/html; charset=UTF-8');
        echo $html;
        exit;
    }

    /**
     *  Add message
     */                            
    public function add()
    {
        $user   = JXFactory::getUser();

        // Store stream
        $comment    = JTable::getInstance( 'Comment' , 'StreamTable' );
        $message    = JTable::getInstance( 'Stream' , 'StreamTable' );
        $message->load(JRequest::getVar('stream_id'));
        $user_id = JRequest::getVar('anon', false) ? JUserHelper::getUserId('anon') : $user->id;

        // People need to be able to read the message to add comment
        if( !$user->authorise('stream.message.read', $message) ){
            // No reason this code would ever get here!
            exit;
        }

        $comment->bind( JRequest::get('POST', JREQUEST_ALLOWRAW) );

        $comment->raw = json_encode( JRequest::get('POST', JREQUEST_ALLOWRAW) );
        $comment->user_id = $user_id;
        $comment->group_id = $message->group_id;            
        $comment->store();

        // Update group stats, if it is a group message
        if( !empty($comment->group_id)){
            $group  = JTable::getInstance( 'Group' , 'StreamTable' );
            $group->load($comment->group_id);
            $group->setParam('last_comment', $comment->id);
            $group->store();
        }

        // Trigger Notification 
        StreamNotification::trigger( 'profile_post_comment', $comment );

        // If the updated date is set further than the current date, it is a pinned stream item and shouldn't be updated
        $now        = new JDate();
        $updated    = new JDate($message->updated);
        $preventUpdate = ($updated->toUnix() > $now->toUnix()); // Check pinned item status too? For now... naa

        // Update stream stats. Recalculate the count
        $this->_recalculateCommentCount($comment->stream_id, $preventUpdate);

        // Get the HTML code to append
        $tmpl = new StreamTemplate();
        header('Content-Type: text/html; charset=UTF-8');
        echo $tmpl->set('comment', $comment)->fetch('comment.item');
        exit;
    }

    /**
     * Delete a message
     */
    public function delete(){
        $my = JXFactory::getUser();
        $id = JRequest::getVar('comment_id');
        $oldComment = '';

        $comment    = JTable::getInstance( 'Comment' , 'StreamTable' );
        $comment->load($id);

        if( !$my->authorise('stream.comment.delete', $comment) ){
            // No reason this code would ever get here!
            exit;
        }
        $oldComment = $comment->comment;
        $comment->delete();
        $this->_recalculateCommentCount($comment->stream_id, true);

        // Send back the original comment if it is the last one
        $data = array();
        $data['comment'] = $oldComment;

        header('Content-Type: text/json');
        echo json_encode($data);
        exit;
    }

    private function _recalculateCommentCount($message_id, $preventUpdate = false)
    {
        // Update stream stats. Recalculate the count
        $model = StreamFactory::getModel('stream');
        $stream = JTable::getInstance('Stream', 'StreamTable');
        $stream->load( $message_id ) ;
        $stream->setParam('comment_count', $model->countComments(array('stream_id' => $stream->id)));
        $stream->store( $preventUpdate );
    }

    /**
     *  Like a comment
     */
    public function like()
    {
        $user = JXFactory::getUser();
        $comment_id = JRequest::getVar('comment_id');

        $comment = JTable::getInstance('Comment', 'StreamTable');
        $comment->load($comment_id);

        $comment->like();
        $comment->store(true);

        $data = array();
        $data['label'] = JText::_('COM_STREAM_UNLIKE_LABEL');
        $data['count'] = $comment->getLikeCount();

        header('Content-Type: text/json');
        echo json_encode($data);
        exit;
    }

    /**
     * Unlike a comment
     */
    public function unlike()
    {
        $user = JXFactory::getUser();
        $comment_id = JRequest::getVar('comment_id');

        $comment = JTable::getInstance('Comment', 'StreamTable');
        $comment->load($comment_id);
        $comment->unlike();

        $comment->store(true);

        $data = array();
        $data['label'] = JText::_('COM_STREAM_LIKE_LABEL');
        $data['count'] = $comment->getLikeCount();

        header('Content-Type: text/json');
        echo json_encode($data);
        exit;
    }

    /**
     * Get all current likes
     */
    public function showlikes()
    {
        $comment_id = JRequest::getVar('comment_id');
        $comment = JTable::getInstance('Comment', 'StreamTable');
        $comment->load($comment_id);

        $likes = ($comment->likes) ? explode(',', $comment->likes ) : null;
        $likeUsers = array();
        $likesHTML = '';
        if ($likes) {
            foreach ($likes as $key => $val) {
                $likeUsers[] = JXFactory::getUser($val)->name;
            }

            $likesHTML = implode(", ", $likeUsers);
            $likesHTML = JXString::isPlural(count($likeUsers)) ? JText::sprintf('COM_STREAM_LIKE_THIS_MANY_LIST', $likesHTML) : JText::sprintf('COM_STREAM_LIKE_THIS_LIST', $likesHTML);
        }

        $data['likes'] = $likesHTML;

        header('Content-Type: text/json');
        echo json_encode($data);
        exit;
    }
}

这里发生的是,此函数已被静态调用:

StreamComment::showall(); // Static Call
但它被定义为一个非静态方法,这意味着PHP希望它被这样调用:

$obj = new StreamComment();
$obj->showall(); // Dynamic Call
如果这是调用此方法的唯一位置,或者始终以静态方式调用此方法,则可以通过将此方法重新定义为静态来解决此问题:

public static function showall() // Added the "static" keyword
{
    // [..code..]
}

希望这有帮助:)x

这里发生的事情是,此函数已被静态调用:

StreamComment::showall(); // Static Call
但它被定义为一个非静态方法,这意味着PHP希望它被这样调用:

$obj = new StreamComment();
$obj->showall(); // Dynamic Call
如果这是调用此方法的唯一位置,或者始终以静态方式调用此方法,则可以通过将此方法重新定义为静态来解决此问题:

public static function showall() // Added the "static" keyword
{
    // [..code..]
}

希望这有帮助:)x

感谢您的回复。当我按照您的建议将其更改为静态时,出现以下错误:严格标准:非静态方法StreamComment::getCommentsHTML()不应在第31行的C:\Program Files\Ampps\www\social\components\com\u stream\controllers\comment.php中静态调用看起来它们犯了与
StreamComment::getCommentsHTML相同的错误。试着把它重新定义为静态的吗?对于StreamComment::getCommentsHTML,我该如何做呢?与我们更新的
showall
的方式相同。在该文件中查找
getCommentsHTML
的声明(类似于
public function getCommentsHTML()
)并添加
静态
关键字。X你有
StreamComment
anywhere的类文件吗?谢谢你的回复。当我按照您的建议将其更改为静态时,出现以下错误:严格标准:非静态方法StreamComment::getCommentsHTML()不应在第31行的C:\Program Files\Ampps\www\social\components\com\u stream\controllers\comment.php中静态调用看起来它们犯了与
StreamComment::getCommentsHTML相同的错误。试着把它重新定义为静态的吗?对于StreamComment::getCommentsHTML,我该如何做呢?与我们更新的
showall
的方式相同。在该文件中查找
getCommentsHTML
的声明(类似于
public function getCommentsHTML()
)并添加
静态
关键字。xStreamComment
StreamComment
anywhere的类文件有没有?根据过去使用Joomla的经验,该生态系统中有一半的代码同样糟糕。(另一半更糟。)只禁用通知(检查Joomla后端、服务器设置或类似设置)比修补此问题的每个实例更容易。根据Joomla过去的经验,该生态系统中的一半代码同样糟糕。(另一半更糟。)只禁用通知(检查Joomla后端、服务器设置或类似设置)比修补此问题的每个实例更容易。