Home  >  Article  >  Backend Development  >  The difference between the usage of static static classes and static static variables in php_PHP tutorial

The difference between the usage of static static classes and static static variables in php_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:10:47854browse

Static is to define a static object or static variable. We will know the characteristics of the variables or class methods defined by static after reading the relevant examples in this article.

1. Create the object $object = new Class(), and then use "->" to call: $object->attribute/function, provided that the variable/method is accessible.
2. Directly call class methods/variables: class::attribute/function, whether static or non-static. But there are prerequisites:
A. If it is a variable, the variable needs to be accessible.
B. If it is a method, in addition to the method being accessible, it also needs to meet:
b1) If it is a static method, there are no special conditions;
b2) If it is a non-static method, it needs to be changed if it is not used in the method. $this means that non-static variables/methods are not called. Of course, there is no problem with calling static variables/methods.

Then let’s take a look at the difference between using $object->… and using class::…:
1. When using $object->…, you need to execute the constructor to create the object;
2. Use class::... to call static methods/variables, without executing the constructor to create objects;
3. Use class::... to call non-static methods/variables, and there is no need to execute the constructor to create objects.

Then the strange thing comes out. Since 2 and 3 are the same, what is the point of the existence of static methods/variables?
static static
Declaring a class member or method as static allows direct access without instantiating the class. Static members (except static methods) cannot be accessed through an object. Static members belong to the class and do not belong to any object instance, but object instances of the class can be shared.

Example:

The code is as follows Copy code
 代码如下 复制代码

Class Person{
// 定义静态成员属性
public static $country = "中国";
// 定义静态成员方法
public static function myCountry() {
// 内部访问静态成员属性
echo "我是".self::$country."人
";
    }
}
class Student extends Person {
    function study() {
        echo "我是". parent::$country."人
";
    }
}
// 输出成员属性值
echo Person::$country."
";  // 输出:中国
$p1 = new Person();
//echo $p1->country;   // 错误写法
// 访问静态成员方法
Person::myCountry();   // 输出:我是中国人
// 静态方法也可通过对象访问:
$p1->myCountry();

// 子类中输出成员属性值
echo Student::$country."
"; // 输出:中国
$t1 = new Student();
$t1->study();    // 输出:我是中国人
?>

Class Person{

// Define static member properties

public static $country = "China";
//Define static member method
public static function myCountry() {
;";
}
}
class Student extends Person {

function study() {
 代码如下 复制代码
slef:: $country
slef:: myCountry()
";

}

}
 代码如下 复制代码
parent:: $country
parent:: myCountry()
// Output member attribute valueecho Person::$country."
"; // Output: China$p1 = new Person();//echo $p1->country; // Wrong writing // Access static member method Person::myCountry(); // Output: I am Chinese// Static methods can also be accessed through objects: $p1->myCountry();// Output member attribute values ​​in subclasses echo Student::$country."< ;br />"; // Output: China$t1 = new Student();$t1->study(); // Output: I am Chinese?>
Run this example, the output is: ChinaI am ChineseI am ChineseChinaI am ChineseSummaryTo access static member attributes or methods inside a class, use self:: (note not $slef), such as:
The code is as follows td> Copy code
slef:: $country slef:: myCountry()
To access parent class static member properties or methods in a subclass, use parent:: (note not $parent), such as:
The code is as follows Copy code
parent:: $countryparent:: myCountry()

External access to static member attributes and methods is class name/subclass name::, such as:

 代码如下 复制代码
Person::$country
Person::myCountry()
Student::$country

But static methods can also be accessed through ordinary objects.


Example of declaring static variables

The code is as follows
 代码如下 复制代码

function foo(){
static $int = 0;// correct
static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too)

$int++;
echo $int;
}
?>

Copy code

 代码如下 复制代码
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
function foo(){

static $int = 0;// correct

static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too)

$int++;

echo $int;
代码如下 复制代码

function Test()
{
static $count = 0;

$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>

}

?>

Example of using static variables function Test() static $w3sky = 0; echo $w3sky; $w3sky++; } ?> Now, each call to the Test() function will output the value of $w3sky and increment it by one. Static variables also provide a way to handle recursive functions. A recursive function is a function that calls itself. Be careful when writing recursive functions, as they may recurse indefinitely. You must ensure that there are adequate ways to terminate recursion. Consider this simple function that recursively counts to 10, using the static variable $count to determine when to stop:
Example of static variables and recursive functions
The code is as follows
Copy code

The code is as follows Copy code
function Test( )<🎜> {<🎜> static $count = 0;<🎜> <🎜> $count++;<🎜> echo $count;<🎜> if ($count < 10) {<🎜> Test();< 🎜> }<🎜> $count--;<🎜> }<🎜> ?> Note: Static variables can be declared as in the above example. Assigning it with the result of an expression in a declaration will result in a parsing error. More about php static variable usage http://www.bkjia.com/PHPjc/444700.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/444700.htmlTechArticlestatic is to define a static object or static variable. We have read about the characteristics of variables or class methods defined by static. You will see the result after the relevant examples in this article. 1. Create object $...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn