class SubObject
{
static $static_a= 0;
public $normal_a=0;
public function __construct() {
++$this->normal_a;
++self::$static_a;
}
}
$obj1 = new SubObject();
print_r($obj1);
result is :
SubObject Object
(
[normal_a] => 1
)
My question is that why its not display output as:
SubObject Object
(
[normal_a] => 1
[static_a] => 1
)
Does static properites does not exist into the object ? Static variable or property are the way to preserver value of the variable within the context of different instance?
The static properties are attributes of the class (all instances), not an attribute of a specific instance. Here's another class ...
class Dog {
public static $species = 'mammal';
public $furColour;
public function __construct($furColour) {
$this->furColour = $furColour;
}
}
$myDog = new Dog('brown');
All dogs are mammals, in other words the entire "class" of dogs are mammals, so it makes sense to store the $species
attribute at the class level (not in every instance of the class). Not all dogs have the same fur colour, that is an attribute of a specific instance of the class know as "Dog".
So, as decided by whoever designed the print_r
function, it only prints attributes specific to the instance, not all the attributes of the entire class (or set of all instances). This design decision makes sense. Especially for classes that, for example, define 10's or even 100's of attributes to be used a constants: you don't want to see all these every time you print_r
to debug.
FYI, if your app has a real need to get the static values, I think this works
print_r( (new ReflectionClass('SubObject'))->getStaticProperties() );
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments