How do I use an object (along with its methods and properties) when I’m inside an object?
Say I have useless classes like these:
class Fruit {
private $name; // Name of the fruit.
private $health = 10; // 0 is eaten, 10 is uneaten.
private $object; // This is a PHP object.
public function __construct($name) {
$this->name = $name;
}
public function set($varname,$value) {
$this->$varname = $value;
}
}
class Eater {
private $name;
public function eat($object) {
$object->set('health',0); // I know I can pass and modify objects like this.
// The object is passed by reference in PHP5 (but not 4), right?
}
}
And I use it as such:
<?php
$pear = new Fruit("Pear");
$apple = new Fruit("Apple");
$paul = new Eater("Paul");
$paul->eat($apple);
?>
But if I modify the Eater class like so:
class Eater {
private $name;
private $objectToEat; // Let's say if I need the object to be over here instead of in a method.
public function set($varname,$value) {
$this->$varname = $value;
}
public function eat() {
$this->objectToEat->set('health',0); // This doesn't work!
}
}
And set the main program like so:
<?php
$pear = new Fruit("Pear");
$apple = new Fruit("Apple");
$paul = new Eater("Paul");
$paul->set('objectToEat',$apple);
$paul->eat();
?>
How can I access the object’s properties from inside a method? I know I use $this->objectToEat to tell PHP I’m talking about the class properity, but since that property is an object, how do I access the object’s methods?
I’ve tried $this->objectToEat->set('health',0) but that doesn’t work. I hope you guys understand what I’m trying to get at (sorry, I can’t figure out how to condense my question without compromising clarity)!
This answer modifies Renesis’ answer
In the class, the object to eat is a private variable hence you can’t go
$paul->objectToEat = $apple;What you can do is to make a setter method inside Eaters
Therefore, you can call the
setFood()method instead.OR
Change
eat()toSaving the modified object back to the original variable.
OR
Although this code is not tested, that is how you can pass a variable by reference.
NOTE: You only need the
&when defining the method not when you’re passing an argument. For more info about Passing by Reference go to this link