0

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

}
5
  • arcade is not an object. So it can't have a property Commented Sep 7, 2015 at 23:10
  • If it's not an object, what kind of fix do I add to the PHP file? Commented Sep 7, 2015 at 23:21
  • @Gigan, can you show us how you initalized $this->arcade? Commented Sep 7, 2015 at 23:36
  • I added the rest of the code from the PHP file. I'm not quite sure where $this->arcade? intializes. I apologize, I'm obviously a novice. Commented Sep 8, 2015 at 0:21
  • @Gigan, can you try with private $arcade instead of var $arcade ? Commented Sep 8, 2015 at 2:08

1 Answer 1

0

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.

Sign up to request clarification or add additional context in comments.

20 Comments

I'm not sure where it initializes. Can you tell me? I posted the rest of the code of the php file in an edit to the original post. Thanks!
Replacing that with what you suggested produced a new error: Parse error: syntax error, unexpected '(object)' (object) (T_OBJECT_CAST) in /home/(removed)/(removed)/sources/components_public/arcade.php on line 23
@Gigan, probably, object cast isn't supported by PHP 5.4. Try var $arcade = new stdClass(); instead.
Tried it in both PHP 5.4 and 5.6, got this new error both times: Parse error: syntax error, unexpected 'new' (T_NEW) in /home/[removed]/[removed]/sources/components_public/arcade.php on line 23
Okay, the error message changed from row 60 to 61: Warning: Creating default object from empty value in /home/removed/removed/sources/components_public/arcade.php on line 61 Here's what that line of code looks like: $this->arcade->lib->user = $this->ipsclass->DB->fetch_row();
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.