The static keyword declares that a property or method is related to a class and not to a particular instance of a class, so such a property or method is also referred to as a class property or class method.
If the access Control permission allows, you do not have to create the class object and directly use the class name plus two colons "::" Call.
The static keyword can be used to modify variables, methods.
Without instantiation, you can directly access static properties and static methods in the class.
Static properties and methods can only access static properties and methods, and non-static properties and methods cannot be accessed by class. Because static properties and methods are created, there may not be any instances of this class that can be called.
Static property, only one copy in memory, shared for all instances.
Use the self:: keyword to access the static members of the current class.
Static Properties Common Properties
All instances of a class, a static property in a common class.
That is, even if there are multiple instances in memory, there is only one copy of the static property.
The following example sets a counter $count property, setting the private and static adornments. This way, the $count property is not directly accessible to the outside world. And the results of the program run we also see multiple instances using the same static $count property.
Copy CodeThe code is as follows:
<?
Class user{
private static $count = 0; Logs the logon status of all users.
Public Function __construct () {
Self:: $count = self:: $count + 1;
}
Public Function GetCount () {
Return self:: $count;
}
Public Function __destruct () {
Self:: $count = self:: $count-1;
}
}
$user 1 = new user ();
$user 2 = new User ();
$user 3 = new User ();
echo "Now here has". $user 1->getcount (). "User";
echo "<br>";
Unset ($user 3);
echo "Now here has". $user 1->getcount (). "User";
?>
Program Run Result:
1
2
Now here has 3 user
Now here you have 2 user jb51.net
Static properties are called directly
Static properties can be used directly without instantiation and can be used directly when the class is not created.
The method used is the class name:: Static property name.
Copy CodeThe code is as follows:
<?
Class math{
public static $PI = 3.14;
}
Find the area of a garden with a radius of 3.
$r = 3;
echo "radius is the area of the $r is <br>";
echo Math:: $pi * $r * $R;
echo "<br><br>";
Here I think 3.14 is not accurate enough, I set it more precisely.
Math:: $pi = 3.141592653589793;
echo "radius is the area of the $r is <br>";
echo Math:: $pi * $r * $R;
?>
Program Run Result:
1
2
3
4
The radius is 3 of the area is
28.26
The radius is 3 of the area is
28.2743338823
Class is not created, static properties can be used directly. When was the static property created in memory? No data was found in PHP. Referring to the concepts in Java, the explanation should also be universal.
Static properties and methods that are created when the class is invoked. Class is called, meaning that the class is created or any static member in the class is called.
Static methods
Static methods do not require that the class be instantiated to be used directly.
The method used is the class name:: Static method name.
Let's continue writing this math class for mathematical calculations. We design a method to figure out the maximum value. Since it is a mathematical operation, we do not need to instantiate this class, if this method can be used to be more convenient.
We are just this class designed to demonstrate the static method. The max () function comparison value is provided in PHP.
Copy CodeThe code is as follows:
<?
Class math{
public static function Max ($num 1, $num 2) {
Return $num 1 > $num 2? $num 1: $num 2;
}
}
$a = 99;
$b = 88;
echo "shows the maximum value in $ A and B is";
echo "<br>";
Echo Math::max ($a, $b);
echo "<br>"; echo "<br>"; echo "<br>";
$a = 99;
$b = 100;
echo "shows the maximum value in $ A and B is";
echo "<br>";
Echo Math::max ($a, $b);
?>
Program Run Result:
Displays the maximum values in $ A and B are
99
Displays the maximum values in $ A and B are
100
How static methods Call static methods
In the first example, when a static method calls another static method, the class name is used directly.
Copy CodeThe code is as follows:
<?
The math class that implements the maximum value comparison.
Class math{
public static function Max ($num 1, $num 2) {
Return $num 1 > $num 2? $num 1: $num 2;
}
public static function Max3 ($num 1, $num 2, $num 3) {
$num 1 = Math::max ($num 1, $num 2);
$num 2 = Math::max ($num 2, $num 3);
$num 1 = Math::max ($num 1, $num 2);
return $num 1;
}
}
$a = 99;
$b = 77;
$c = 88;
echo "Displays the maximum value in the $a $b $c is";
echo "<br>";
Echo math::max3 ($a, $b, $c);
?>
Program Run Result:
1
2
Display the maximum value in 99 77 88 is
99
You can also use self:: Call other static methods in the current class. Recommendations
Copy CodeThe code is as follows:
<?
The math class that implements the maximum value comparison.
Class math{
public static function Max ($num 1, $num 2) {
Return $num 1 > $num 2? $num 1: $num 2;
}
public static function Max3 ($num 1, $num 2, $num 3) {
$num 1 = Self::max ($num 1, $num 2);
$num 2 = Self::max ($num 2, $num 3);
$num 1 = Self::max ($num 1, $num 2);
return $num 1;
}
}
$a = 99;
$b = 77;
$c = 88;
echo "Displays the maximum value in the $a $b $c is";
echo "<br>";
Echo math::max3 ($a, $b, $c);
?>
Program Run Result:
1
2
Display the maximum value in 99 77 88 is
99
static method call static property
Use the class name:: Static property name to invoke a static property in this class.
Copy CodeThe code is as follows:
<?
//
Class circle{
public static $PI = 3.14;
public static function Circleacreage ($r) {
return $r * $r * Circle:: $PI;
}
}
$r = 3;
echo "Radius $r the area of the circle is". Circle::circleacreage ($R);
?>
Program Run Result:
1
The area of the circle with a radius of 3 is 28.26.
Use self:: Call the static property of this class. Recommendations
Copy CodeThe code is as follows:
<?
//
Class circle{
public static $PI = 3.14;
public static function Circleacreage ($r) {
return $r * $r * self:: $PI;
}
}
$r = 3;
echo "Radius $r the area of the circle is". Circle::circleacreage ($R);
?>
Program Run Result:
1
The area of the circle with a radius of 3 is 28.26.
Static methods cannot invoke non-static properties
A static method cannot invoke a non-static property. You cannot use Self:: Call a non-static property.
Copy CodeThe code is as follows:
<?
//
Class circle{
Public $pi = 3.14;
public static function Circleacreage ($r) {
return $r * $r * self::p i;
}
}
$r = 3;
echo "Radius $r the area of the circle is". Circle::circleacreage ($R);
?>
Program Run Result:
1
Fatal error:undefined class constant ' pi ' in e:phpprojectstest.php on line 7
You cannot also use $this to get the value of a non-static property.
Copy CodeThe code is as follows:
<?
//
Class circle{
Public $pi = 3.14;
public static function Circleacreage ($r) {
return $r * $r * $this->pi;
}
}
$r = 3;
echo "Radius $r the area of the circle is". Circle::circleacreage ($R);
?>
Program Run Result:
1
Fatal error:using $this When not in object context in e:phpprojectstest.php on line 7
Static method calls a non-static method
In PHP5, a non-static method cannot be called using $this identity in a static method.
Copy CodeThe code is as follows:
<?
The math class that implements the maximum value comparison.
Class math{
Public Function Max ($num 1, $num 2) {
echo "Bad<br>";
Return $num 1 > $num 2? $num 1: $num 2;
}
public static function Max3 ($num 1, $num 2, $num 3) {
$num 1 = $this->max ($num 1, $num 2);
$num 2 = $this->max ($num 2, $num 3);
$num 1 = $this->max ($num 1, $num 2);
return $num 1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "Displays the maximum value in the $a $b $c is";
echo "<br>";
Echo math::max3 ($a, $b, $c);
?>
Program Run Result:
Display the maximum value in 99 77 188 is
Fatal error:using $this When not in object context in e:test.php on line 10
When there is a non-static method in a class that is self: called, the system automatically converts the method to a static method.
The following code is executed and has the result. Because the Max method is converted to a static method by the system.
Copy CodeThe code is as follows:
<?
The math class that implements the maximum value comparison.
Class math{
Public Function Max ($num 1, $num 2) {
Return $num 1 > $num 2? $num 1: $num 2;
}
public static function Max3 ($num 1, $num 2, $num 3) {
$num 1 = Self::max ($num 1, $num 2);
$num 2 = Self::max ($num 2, $num 3);
$num 1 = Self::max ($num 1, $num 2);
return $num 1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "Displays the maximum value in the $a $b $c is";
echo "<br>";
Echo math::max3 ($a, $b, $c);
?>
Program Run Result:
1
2
Display the maximum value in 99 77 188 is
188
In the following example, we let the static method Max3 use self:: called the non-static method Max, there is a non-static method max to call the non-static property $pi through $this.
In the run is reported error, this error and the previous example 3-1-9.php, this is the non-static method Max reported static method call non-static property error.
This proves that the non-static method we define here, Max, is automatically converted to a static method by the system.
Copy CodeThe code is as follows:
<?
The math class that implements the maximum value comparison.
Class math{
Public $pi = 3.14;
Public Function Max ($num 1, $num 2) {
echo self:: $PI; There seems to be no problem with the call here.
Return $num 1 > $num 2? $num 1: $num 2;
}
public static function Max3 ($num 1, $num 2, $num 3) {
$num 1 = Self::max ($num 1, $num 2);
$num 2 = Self::max ($num 2, $num 3);
$num 1 = Self::max ($num 1, $num 2);
return $num 1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "Displays the maximum value in the $a $b $c is";
echo "<br>";
Echo math::max3 ($a, $b, $c);
?>
Program Run Result:
1
2
Display the maximum value in 99 77 188 is
Fatal error:access to undeclared static Property:math:: $pi in e:phpprojectstest.php on line 7
Php--static usage