Reputation: 63537
How do you access a PHP object's properties?
Also, what is the difference between accessing an object's property with
$this->$property1
vs. $this->property1
?
When I try to use $this->$property1
I get the following error:
'PHP: Cannot access empty property'.
PHP's documentation on object properties has one comment which mentions this, but the comment doesn't really explain in depth.
Upvotes: 35
Views: 68958
Reputation: 731
$property1
// specific variable$this->property1
// specific attribute The general use on classes is without "$"
otherwise you are calling a variable called $property1
that could take any value.
Example:
class X {
public $property1 = 'Value 1';
public $property2 = 'Value 2';
}
$property1 = 'property2'; //Name of attribute 2
$x_object = new X();
echo $x_object->property1; //Return 'Value 1'
echo $x_object->$property1; //Return 'Value 2'
Upvotes: 41
Reputation: 1546
property1
is a string while $property1
is a variable. So when accessing $this->$property1
PHP looks for contents of the variable named $property1
and because it (probably) doesn't exist it's empty so that's why you get the Cannot access empty property
error.
Upvotes: 3
Reputation: 21856
$this->property1
means:
use the object and get the variable property1 bound to this object
$this->$property1
means:
evaluate the string $property1 and use the result to get the variable named by $property1 result bound to this object
Upvotes: 18