Introduction
In a PHP class, properties and methods declared with static keyword cannot be accessed by its object with the help of -> operator. In fact, object is not required to access any instance of class. Default visibility of static items in a class is public
static properties
To access a static property from outside class, we need to use scope resolution operator (::) along with name of class. A string variable evaluating to name of class can also provide to static property
<?php
class testclass{
static $name="test";
}
echo testclass::$name;
$var="testclass";
echo $var::$name;
?>to use static propery inside any method of the same class, use self keyword instead of -> operator that is used for accessing instance properties.
<?php
class testclass{
static $name="test";
public function test(){
echo self::$name;
}
}
$obj=new testclass();
$obj->test();
?>Any static property declared in parent class can be referred to inside a child class method, by using parent keyword along with scope resolution operator
<?php
class testclass{
static $name="test";
public function test(){
echo self::$name;
}
}
class myclass extends testclass{
public function mytest(){
echo parent::$name;
}
}
$obj=new myclass();
$obj->mytest();
?>static methods
When a method is declared as static, the pseudo-variable $this is not available to it. Hence, instance attributes of a class cannot be accessed in it. The static method is called by name of class along with scope resolution operator
In following example, the class has a static property $count that increnments every time constructor is executed (i.e. for each object). Inside the class, there is a static function that retrieves value of static property
Example
<?php
class testclass{
static $count=0;
function __construct(){
self::$count++;
}
static function showcount(){
echo "count = " . self::$count;
}
}
$a=new testclass();
$b=new testclass();
$c=new testclass();
testclass::showcount();
?>Output
This will produce following output −
count = 3