【问题标题】:PHP Error - "Warning: Creating default object from empty value in..." [duplicate]PHP错误-“警告:从...中的空值创建默认对象” [重复]
【发布时间】:2015-12-03 12:06:54
【问题描述】:

我的网站上有一个 PHP 文件,在从 PHP 5.3 升级到 PHP 5.4 后出现错误。这是它产生的错误:

警告:从空值创建默认对象(删除此 部分错误)/arcade.php 第 60 行

60后的代码是这样的:

{  
    $this->arcade->version = '';        
  }else
  {
    $this->arcade->version = '3.4.0';       
  } 

我假设它与那里的空白值有关。我研究了一些类似的修复程序,但我仍然无法确定应该添加到 php 文件中以修复它的确切内容。

非常感谢您提前提供的任何帮助!

编辑:这是其余的代码,我不确定它在哪里初始化。我对这些事情一无所知。

if ( ! defined( 'IN_IPB' ) )
{
    print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files. <br /> <b>File Version 3.3.0</b>";
    exit();
}


class component_public
{
    var $ipsclass   = '';
    var $arcade     = '';

    function run_component()
    {
       $this->ipsclass->load_language( 'lang_Arcade' );



    if( !$this->ipsclass->cache['arcade_settings']['allow_user_skin'] )
     {  
        if( $this->ipsclass->cache['arcade_settings']['skin'] == 0 ) {
             $this->ipsclass->load_template('skin_Arcade1');
        } 
        if( $this->ipsclass->cache['arcade_settings']['skin'] == 1 ) {
            $this->ipsclass->load_template('skin_Arcade2');     
        }  
        if( $this->ipsclass->cache['arcade_settings']['skin'] == 2 ) {
            $this->ipsclass->load_template('skin_Arcade3');     
        } 
     }else

     if( $this->ipsclass->cache['arcade_settings']['allow_user_skin'] && !$this->ipsclass->member['id'] )
     {  
        if( $this->ipsclass->cache['arcade_settings']['skin'] == 0 ) {
             $this->ipsclass->load_template('skin_Arcade1');
        } 
        if( $this->ipsclass->cache['arcade_settings']['skin'] == 1 ) {
            $this->ipsclass->load_template('skin_Arcade2');     
        }  
        if( $this->ipsclass->cache['arcade_settings']['skin'] == 2 ) {
            $this->ipsclass->load_template('skin_Arcade3');     
        } 
     }else

    if( $this->ipsclass->cache['arcade_settings']['allow_user_skin'] && $this->ipsclass->member['id'] )
      {
        $this->ipsclass->DB->query("SELECT arcade_skin FROM ".$this->ipsclass->vars['sql_tbl_prefix']."members WHERE id=".intval($this->ipsclass->member['id']));
        $this->arcade->lib->user = $this->ipsclass->DB->fetch_row();

        if( $this->arcade->lib->user['arcade_skin'] == 0) {
             $this->ipsclass->load_template('skin_Arcade1');        
        } 
        if( $this->arcade->lib->user['arcade_skin'] == 1) {
            $this->ipsclass->load_template('skin_Arcade2');     
        }  
        if( $this->arcade->lib->user['arcade_skin'] == 2) {
            $this->ipsclass->load_template('skin_Arcade3');     
        } 
     }


     if( !$this->ipsclass->cache['arcade_settings']['build'] )  
      {  
        $this->arcade->version = '';        
      }else
      {
        $this->arcade->version = '3.4.0';       
      } 


        $this->ipsclass->vars['arcade_dir'] = 'arcade';

        $component_copyright = '<div class="copyright" align="center"><a href="http://www.ibparcade.com" style="text-decoration: none;" target="_blank">ibProArcade</a> '.$this->arcade->version.' &copy; '.date('Y').'</div>';

        $this->ipsclass->skin['_wrapper'] = str_replace("<% COPYRIGHT %>", $component_copyright . "<% COPYRIGHT %>", $this->ipsclass->skin['_wrapper']);        


        require ROOT_PATH.$this->ipsclass->vars['arcade_dir'].'/db/arcade_mysql.php';
        $this->arcade->db = new arcade_db;
        $this->arcade->db->ipsclass =& $this->ipsclass;

        require ROOT_PATH.$this->ipsclass->vars['arcade_dir'].'/modules/arcadelib.php';
        $this->arcade->lib = new arcadelib;
        $this->arcade->lib->ipsclass =& $this->ipsclass;
        $this->arcade->lib->arcade =& $this->arcade;
        $this->arcade->lib->init();

        require ROOT_PATH.$this->ipsclass->vars['arcade_dir'].'/modules/scoreboard.php';
        $this->arcade->sb = new scoreboard;
        $this->arcade->sb->ipsclass =& $this->ipsclass;
        $this->arcade->sb->arcade =& $this->arcade;

        require ROOT_PATH.$this->ipsclass->vars['arcade_dir'].'/modules/arcadeskin.php';
        $this->arcade->skin = new arcadeskin;
        $this->arcade->skin->ipsclass =& $this->ipsclass;
        $this->arcade->skin->arcade =& $this->arcade;

        require_once ROOT_PATH.'sources/api/api_topics_and_posts.php';
        $this->arcade->api = new api_topics_and_posts();
        $this->arcade->api->ipsclass =& $this->ipsclass;



        if( $this->arcade->lib->settings['arcade_status'] )
        {

            $this->arcade->lib->arcade_error( array( LEVEL => 1, MSG => 'arcade_offlinemsg' ) );

        }

        $page = (isset($this->ipsclass->input['p'])) ? $this->ipsclass->txt_alphanumerical_clean( $this->ipsclass->input['p'] ) : 'default';
        $code = (isset($this->ipsclass->input['code'])) ? $this->ipsclass->input['code'] : '';

        // Backwords compatibility with older games
        if( isset($this->ipsclass->input['do']) && ($this->ipsclass->input['do'] == 'newscore') )
        {
            $code = 'newscore';
        }

        if( isset($this->ipsclass->input['do']) && ($this->ipsclass->input['do'] == 'verifyscore') )
        {
            $code = 'verifyscore';
        }

        if( isset($this->ipsclass->input['do']) && ($this->ipsclass->input['do'] == 'savescore') )
        {
            $code = 'savescore';
        }


        $file = ROOT_PATH.$this->ipsclass->vars['arcade_dir'].'/modules/page_'.$page.'.php';
        if( file_exists($file) )
        {
            require $file;  
        }
        else
        {
            require ROOT_PATH.$this->ipsclass->vars['arcade_dir'].'/modules/page_default.php';
        }

        $runme = new arcade_page;
        $runme->ipsclass =& $this->ipsclass;
        $runme->arcade =& $this->arcade;
        $runme->exec_page( $code );
    }

}

【问题讨论】:

  • arcade 不是对象。所以它不能有属性
  • 如果它不是一个对象,我应该在 PHP 文件中添加什么样的修复?
  • @Gigan,你能告诉我们你是如何初始化 $this->arcade 的吗?
  • 我添加了 PHP 文件中的其余代码。我不太确定 $this->arcade 在哪里?初始化。抱歉,我显然是新手。
  • @Gigan,你可以尝试使用 private $arcade 而不是 var $arcade 吗?

标签: php


【解决方案1】:

如果尝试访问不存在对象的属性,则会出现该错误,如下所示:

$arcade = null;
$arcade->version = '3.4.0';

为了修复它,您的$this-&gt;arcade 属性不应为空。

更新。

首先,完全删除带有arcade定义/初始化的行:

class component_public
{
    var $ipsclass   = '';

    function run_component()
    {
       $this->ipsclass->load_language( 'lang_Arcade' );

接下来,添加这段代码:

class SilentAssasin {

    public function __get($property) {
        return $this->{$property} = new static();
    }

}

class component_public extends SilentAssasin
{

而不是这个:

class component_public
{

那必须修复 creating from empty 错误。

啊,忘了提... SilentAssasin 只是自定义类的名称,实际上您可以将其命名为任何您喜欢的名称,例如 PathosErrorSuppressorOversizedBanHammerForThatStupidError 等。

【讨论】:

  • 我不确定它在哪里初始化。你能告诉我吗?我在对原始帖子的编辑中发布了 php 文件的其余代码。谢谢!
  • 用您建议的内容替换它会产生一个新错误:解析错误:语法错误,/home/(removed)/(removed)/sources 中的意外 '(object)' (object) (T_OBJECT_CAST) /components_public/arcade.php 第 23 行
  • @Gigan,PHP 5.4 可能不支持对象转换。请改用var $arcade = new stdClass();
  • 在 PHP 5.4 和 5.6 中都试过了,两次都出现了这个新错误:解析错误:语法错误,/home/[removed]/[removed]/sources 中的意外'new' (T_NEW) /components_public/arcade.php 第 23 行
  • 好的,错误信息从第 60 行更改为第 61 行:警告:从第 61 行的 /home/removed/removed/sources/components_public/arcade.php 中的空值创建默认对象 下面是那行代码的样子:$this-&gt;arcade-&gt;lib-&gt;user = $this-&gt;ipsclass-&gt;DB-&gt;fetch_row();
猜你喜欢
  • 2013-06-19
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多