Home > Article > Backend Development > The difference in usage between php static methods and non-static methods
The following editor will bring you a brief analysis of the usage differences between php static methods and non-static methods. The editor thinks it’s pretty good, so I’ll share it with you now and give it as a reference. Let’s follow the editor and take a look.
In PHP programming, the static keyword declares a attribute or method that is related to the class, not to the class Relevant to a specific instance, therefore, such attributes or methods are also called "class attributes" or "class methods"
Ifaccess controlpermissions allow, you do not need to create this classObjectAnd directly use the class name plus two colons "::" to call.
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's properties and methods can only access static properties and methods, but cannot access non-static properties and methods. Because when static properties and methods are created, there may not yet be any instances of this class that can be called.
static properties 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 properties are called directly
Static properties can be used directly without instantiation, and can be used directly before the class is created.
Usage:
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 properties 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.
3. Static methods
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 for 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 the static method. 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 static methods call static methods
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 cannot also use $this to obtain the value of non-static properties.
Static methods call non-static methods
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 is the detailed content of The difference in usage between php static methods and non-static methods. For more information, please follow other related articles on the PHP Chinese website!