Inhaltsverzeichnis
php中静态类与静态变量用法区别解析
Heim Backend-Entwicklung PHP-Tutorial php中静态类与静态变量用法区别解析_PHP教程

php中静态类与静态变量用法区别解析_PHP教程

Jul 13, 2016 am 09:45 AM
php static Und 区别 变量 Ja 用法 解析 statisch

php中静态类与静态变量用法区别解析

 static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了.

 

  1. 创建对象$ob ject = new Class(),然后使用”->”调用:$ob ject->attribute/function,前提是该变量/方法可访问.

 

  2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以,但是有前提条件.

  A. 如果是变量,需要该变量可访问.

  B. 如果是方法,除了该方法可访问外,还需要满足.

  ① 如果是静态方法,没有特殊条件.

  ② 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题.

 

  然后我们再看一下使用$ob ject->… 和使用class::… 都有什么区别:

  1. 使用$ob ject->… ,需要执行构造函数创建对象.

  2. 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象.

  3. 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象.

  然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?

 

  静态static:声明类成员或方法为 static,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外),静态成员属于类,不属于任何对象实例,但类的对象实例都能共享.

 

  例子,代码如下:

  [代码]php代码:

  01

  02Class Person{

  03 // 定义静态成员属性

  04 public static $country = "中国";

  05 // 定义静态成员方法

  06 public static function myCountry() {

  07 // 内部访问静态成员属性

  08 echo "我是".self::$country."人
";

  09 }

  10}

  11class Student extends Person {

  12 function study() {

  13 echo "我是". parent::$country."人
";

  14 }

  15}

  16// 输出成员属性值

  17echo Person::$country."
"; // 输出:中国

  18$p1 = new Person();

  19//echo $p1->country; // 错误写法

  20// 访问静态成员方法

  21Person::myCountry(); // 输出:我是中国人

  22// 静态方法也可通过对象访问:

  23$p1->myCountry();

  24

  25// 子类中输出成员属性值

  26echo Student::$country."
"; // 输出:中国

  27$t1 = new Student();

  28$t1->study(); // 输出:我是中国人

  29?>

  运行该例子,输出:

  中国

  我是中国人

  我是中国人

  中国

  我是中国人

 

  小结:在类内部访问静态成员属性或者方法,使用 self::(注意不是 $slef),代码如下:

  slef:: $country

  slef:: myCountry()

 

  在子类访问父类静态成员属性或方法,使用 parent::(注意不是 $parent),代码如下:

  parent:: $country

  parent:: myCountry()

 

  外部访问静态成员属性和方法为 类名/子类名::,代码如下:

  Person::$country

  Person::myCountry()

  Student::$country

     但静态方法也可以通过普通对象的方式访问.

 

  例子,声明静态变量,代码如下:

  [代码]php代码:

  1

  2 function foo(){

  3 static $int = 0;// correct

  4 static $int = 1+2; // wrong (as it is an ex pression)

  5 static $int = sqrt(121); // wrong (as it is an ex pression too)

  6 $int++;

  7 echo $int;

  8 }

  9?>

 

  例子,使用静态变量的例子,代码如下:

  [代码]php代码:

  1

  2 function Test()

  3 {

  4 static $w3sky = 0;

  5 echo $w3sky;

  6 $w3sky++;

  7 }

  8?>

  现在,每次调用 Test() 函数都会输出 $w3sky 的值并加一.

 

  静态变量也提供了一种处理递归函数的方法,递归函数是一种调用自己的函数,写递归函数时要小心,因为可能会无穷递归下去,必须确保有充分的方法来中止递归,一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止.

  例子,静态变量与递归函数,代码如下:

  [代码]php代码:

  01

  02 function Test()

  03 {

  04 static $count = 0;

  05

  06 $count++;

  07 echo $count;

  08 if ($count

  09 Test();

  10 }

  11 $count--;

  12 }

  13?>

  注:静态变量可以按照上面的例子声明,如果在声明中用表达式的结果对其赋值会导致解析错误.

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1036683.htmlTechArticlephp中静态类与静态变量用法区别解析 static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

Hat Bitcoin Aktien? Hat Bitcoin Aktien? Mar 03, 2025 pm 06:42 PM

Hat Bitcoin Aktien?

Deepseek Was ist der Unterschied zwischen der R1- und V3 -Version Deepseek Was ist der Unterschied zwischen der R1- und V3 -Version Feb 19, 2025 pm 03:24 PM

Deepseek Was ist der Unterschied zwischen der R1- und V3 -Version

Zusammenfassung der FAQs für die Verwendung von Deepseek Zusammenfassung der FAQs für die Verwendung von Deepseek Feb 19, 2025 pm 03:45 PM

Zusammenfassung der FAQs für die Verwendung von Deepseek

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Wie analysiert und verarbeitet man HTML/XML in PHP?

Was ist der Unterschied zwischen dem Handel vor dem Markt und nach dem Markt? Detaillierte Erläuterung der Unterschiede zwischen dem Handel mit Vormarkt und After-Market Was ist der Unterschied zwischen dem Handel vor dem Markt und nach dem Markt? Detaillierte Erläuterung der Unterschiede zwischen dem Handel mit Vormarkt und After-Market Mar 03, 2025 pm 11:54 PM

Was ist der Unterschied zwischen dem Handel vor dem Markt und nach dem Markt? Detaillierte Erläuterung der Unterschiede zwischen dem Handel mit Vormarkt und After-Market

See all articles