简体   繁体   中英

i am trying to make a array of a object in php

I'm trying to make an array of Spell s.

My current code

class Spell
{
    public $bomb = 0;
    public $fire = 0;

    function Spell()
    {
        $this->bomb =0;
        $this->fire =0;
    }
}

And I declare the object spell on my game class like this

class game
{  
    public $Spell=array();

    function Game()
    {
         $this->Spell[0] = new Spell(); 
    }

    function s()
    {
        $this->Spell[1]->$bomb = $load($x)
            $this->Spell[1]->$fire = $load($x);
        $this->Spell[2]->$bomb = $load($y)
        $this->Spell[3]->$bomb = $load($z)
    }
}

It returns this error -- Warning: Creating default object from empty value in... I guess this isn't the best way to create an array of objects. How to do it properly?

EDIT: xyz, just return strings

The problem is that you have not created objects for $this->Spell[1], $this->Spell[2] and $this->Spell[3]. If you change your Game() constructor to this:

function Game()
{
  for ($i = 1; $i <= 3; $i++) {
     $this->Spell[$i] = new Spell(); 
  }      
}

It should probably work fine.

You seem to have more than just one problems in your code. However, I will discuss the one you have asked the question for. Instead of

$this->Spell[1]->$bomb = something;

Use

$this->Spell[1]->bomb = something;

Second, What do you intend to do by using $load($y)?

If you're using a function named "load", use load($y)

you must create object, then use it, look:

class Spell
{
    public $bomb = 0;
    public $fire = 0;

    function __construct()
    {
        $this->bomb =0;
        $this->fire =0;
    }
}


class game
{
    public $Spell=array();

    function s()
    {
        $this->Spell[1] = new Spell();
        $this->Spell[1]->bomb = 0 ; //or other value
    }
}
<?php

class Spell
{
 public $bomb = 0;
 public $fire = 0;

 function Spell()
 {
   $this->bomb =0;
   $this->fire =0;
 }

}

class game
{ 
 public $Spell=array();
 function Game($index)
 {
   $this->Spell[$index] = new Spell(); 
   echo 'constructer called';
 }

 function s()
 {
   $this->Spell[1]->bomb = $load($x);
   $this->Spell[1]->fire = $load($x);
   $this->Spell[2]->bomb = $load($y);
   $this->Spell[3]->bomb = $load($z);
 }

}

 $ob = new game(); 
 //$ob->Game(1); to pass the index for array.

?>

You are using lots of undefined stuff, I would say the half of your script is missing. I just added the comments down here:

class game
{  
public $Spell=array();

function Game()
{
     $this->Spell[0] = new Spell(); 
}

function s()
{
  /** 
    down here you are using these undefined "variables": 
      $bomb
      $load
      $x
      $y 
      $z
    undefined means, you are using a varible which was not declared. so it´s just null. 
    I tried to fix it: 
  **/
    $x = 1; 
    $y = 2; 
    $z = 3; 

    $this->Spell[1] = new Spell(); 
    $this->Spell[2] = new Spell(); 
    $this->Spell[3] = new Spell(); 

    $this->Spell[1]->bomb = load($x); // add ;  
    $this->Spell[1]->fire = load($x);
    $this->Spell[2]->bomb = load($y)
    $this->Spell[3]->bomb = load($z)
}
}
function load($v)
{
  return $v * 2; 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM