Steve
Steve

Reputation: 1672

Defining variable in a class

I am new to PHP, and I'm getting undefined variable $firstDect even though it is defined:

class Deck
{
    public function getdeck()
    {
        $firstDeck = new Deck();
        return $this->firstDeck;
    }
}

and,

<div class="panel-body">
    <?php foreach ($firstDeck->getDeck() as $card): ?>
        <img class="col-md-3" src="<?php echo $card->getImage(); ?>">
    <?php endforeach; ?>
</div>

Upvotes: 0

Views: 73

Answers (6)

bracco23
bracco23

Reputation: 2211

A lot of things are wrong.

You are trying to use a variable defined inside a function.

I think what you are trying to do is:

class Deck{
    public function getDeck(){
        return array(card1, card2...);
    }
}

$firstDeck = new Deck();

This leaves some undefined questions about what a card is or other stuff which is out of scope on the question.

On the other side, i used an array to assure that the output of the getDeck method is iterable, but i think there are ways to make your class iterable by itself, you just have to look up in the documentation.

Upvotes: -1

Max Play
Max Play

Reputation: 4038

The reserved word $this is a reference to the object of the class you are currently in. So $this->firstDeck indicates that you have a class member with the name $firstDeck, which you do not have.

You either declare it in your class as a member

class Deck
{
    private $firstDeck;
    public getdeck() { ... }
}

or you just write

public getdeck() 
{
    $firstdeck = new Deck();
    return $firstdeck;
}

Upvotes: 0

Alok Patel
Alok Patel

Reputation: 8012

You've defined the variable in function itself.

 public function getdeck()
        {
            $firstDeck = new Deck();
            return $this->firstDeck;
        }

You can't use $this with variables declared inside functions, $this is used to reference variable declared at class level. You can rewrite your function like this,

 public function getdeck()
        {
            $firstDeck = new Deck();
            return $firstDeck;
        }

or

You can define the variable at class level like this,

class Deck
    {
        private $firstDeck;
        public function getdeck()
        {
            $this->firstDeck = new Deck();
            return $this->firstDeck;
        }
    }

Upvotes: 1

Dileep Kumar
Dileep Kumar

Reputation: 1107

Use following class:

class Deck
    {
        public $firstDeck;
        public function getdeck()
        {
            $this->firstDeck = new Deck();
            return $this->firstDeck;
        }
    }

Upvotes: 1

Vincent Decaux
Vincent Decaux

Reputation: 10714

You have an error, use this :

    public function getdeck()
    {
        $firstDeck = new Deck();
        return $firstDeck ->firstDeck;
    }

$this relate to the self class.

Upvotes: -1

Akshay Hegde
Akshay Hegde

Reputation: 16997

class Deck
{
   /* You have to define variable something like below before 
      accessing $this->firstDeck 
   */
   public $firstDeck;


   public function getdeck()
   {
       $this->firstDeck = new Deck();
       return $this->firstDeck;
   }
}

Read More from Here

Upvotes: 1

Related Questions