In PHP programming, the static keyword declares that an attribute or method is related to a class. Rather than being related to a specific instance of the class, therefore, such attributes or methods are also called "class attributes" or "class methods"
If access control permissions allow, you can call it directly using the class name plus two colons "::" without creating an object of this class.
The static keyword can be used to modify variables and methods.
You can directly access the static attributes and static methods in the class without instantiation.
Static properties and methods can only access static properties and methods, and non-static properties and methods cannot be accessed by class. Because when static properties and methods are created, there may not yet be any instances of this class that can be called.
Static attributes have only one copy in memory and are shared by all instances.
Use the self:: keyword to access static members of the current class.
All instances of a class share static properties in the class.
That is, even if there are multiple instances in the memory, there is only one copy of the static attributes.
Example, set a counter $count attribute, set private and static modifications.
In this way, the outside world cannot directly access the $count attribute. The result of running the program also shows that multiple instances are using the same static $count attribute.
<?php class user { private static $count = 0 ; //记录所有用户的登录情况. public function __construct() { self::$count = self::$count + 1; } public function getcount() { return self::$count; } public function __destruct() { self::$count = self::$count - 1; } } $user1 = new user(); $user2 = new user(); $user3 = new user(); echo "now here have " . $user1->getcount() . " user"; echo "<br />"; unset($user3); echo "now here have " . $user1->getcount() . " user"; ?>
Second, static attributes are called directly
Static properties can be used directly without instantiation, and can be used directly before the class is created.
How to use:
Class name:: Static property name
<?php class math { public static $pi = 3.14; } // 求一个半径3的园的面积。 $r = 3; echo "半径是 $r 的面积是<br />"; echo math::$pi * $r * $r; echo "<br /><br />"; //这里我觉得 3.14 不够精确,我把它设置的更精确。 math::$pi = 3.141592653589793; echo "半径是 $r 的面积是<br />"; echo math::$pi * $r * $r; ?>
The class is not created, and the static attributes can be used directly. When are static properties created in memory?
I didn’t see any relevant information in php.
Quoting concepts in Java to explain should also be universal. Static properties and methods are created when the class is called.
Three, static method
Static methods can be used directly without the class being instantiated.
The method used is class name:: static method name
Continue to write this math class to perform mathematical calculations.
Design a method to calculate the maximum value. Since it is a mathematical operation, there is no need to instantiate this class. It would be much more convenient if this method can be taken over and used.
This is a class designed just to demonstrate static methods. PHP provides the max() function to compare numerical values.
<?php class math { public static function max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } } $a = 99; $b = 88; echo "显示 $a 和 $b 中的最大值是"; echo "<br />"; echo math::max($a, $b); echo "<br />"; echo "<br />"; echo "<br />"; $a = 99; $b = 100; echo "显示 $a 和 $b 中的最大值是"; echo "<br />"; echo math::max($a,$b); ?>
How to call static method
The first example, when a static method calls other static methods, use self::
<?php // 实现最大值比较的math类。 class math { public static function max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } public static function max3($num1, $num2, $num3) { $num1 = self::max($num1, $num2); $num2 = self::max($num2, $num3); $num1 = self::max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 88; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo math::max3($a, $b, $c); ?>
Static methods call static properties
Use self:: to call the static properties of this class.
<?php // class circle { public static $pi = 3.14; public static function circleacreage($r) { return $r * $r * self::$pi; } } $r = 3; echo " 半径 $r 的圆的面积是 " . circle::circleacreage($r); ?>
Static methods cannot call non-static properties. Non-static properties cannot be called using self::.
<?php // 这个方式是错误的 class circle { public $pi = 3.14; public static function circleacreage($r) { return $r * $r * self::pi; } } $r = 3; echo " 半径 $r 的圆的面积是 " . circle::circleacreage($r); ?>
You also cannot use $this to get the value of a non-static property.
Static method calls non-static method
In PHP5, the $this identifier cannot be used in static methods to call non-static methods.
<?php // 实现最大值比较的math类。 class math { public function max($num1, $num2) { echo "bad<br />"; return $num1 > $num2 ? $num1 : $num2; } public static function max3($num1, $num2, $num3) { $num1 = $this->max($num1, $num2); $num2 = $this->max($num2, $num3); $num1 = $this->max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 188; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo math::max3($a, $b, $c); //同样的这个会报错 ?>
When a non-static method in a class is called by self::, the system will automatically convert this method into a static method.
<?php // 实现最大值比较的math类。 class math { public function max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } public static function max3($num1, $num2, $num3) { $num1 = self::max($num1, $num2); $num2 = self::max($num2, $num3); $num1 = self::max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 188; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo math::max3($a, $b, $c); ?>
The above article briefly analyzing the usage differences between PHP static methods and non-static methods is all the content shared by the editor. I hope it can give you a reference, and I hope you will support Bangkejia more.