dongli5785 2015-09-07 23:09
浏览 72
已采纳

PHP错误 - “警告:在...中从空值创建默认对象”[复制]

This question already has an answer here:

I have a PHP file on my website that is producing errors after upgrading from PHP 5.3 to PHP 5.4. This is the error it produces:

Warning: Creating default object from empty value in (removing this part of the error)/arcade.php on line 60

This is what the code looks like after like 60:

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

I'm assuming it has to do with the blank value there. I researched some similar fixes, but I'm still having trouble figuring out exactly what I should add to the php file to fix it.

Thank you very much for any help ahead of time!

Edit: Here's the rest of the code I'm not sure where it intializes. I'm pretty ignorant of these things.

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 );
    }

}
</div>
  • 写回答

1条回答 默认 最新

  • dpwgzi7987 2015-09-07 23:40
    关注

    You got that error if trying to access properties of unexistent objects, like this:

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

    In order to fix it, yours $this->arcade property should not be empty.

    Upd.

    First, remove the line with arcade definition/initialization entirely:

    class component_public
    {
        var $ipsclass   = '';
    
        function run_component()
        {
           $this->ipsclass->load_language( 'lang_Arcade' );
    

    Next, add this piece of code:

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

    instead of this:

    class component_public
    {
    

    That must fix that creating from empty error.

    Ah, forgot to mention... That SilentAssasin is just a name for custom class, you actually can name it anything you like, like PathosErrorSuppressor or OversizedBanHammerForThatStupidError etc.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题