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

发布时间:2017-05-25 14:00 来源:互联网 当前栏目:web技术类

 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<?php

  02Class Person{

  03 // 定义静态成员属性

  04 public static $country = "中国";

  05 // 定义静态成员方法

  06 public static f

情侣网名[www.la240.com/html2017/1/25/]
unction myCountry() {

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

  08 echo "我是".self::$country."人<br />";

  09 }

  10}

  11class Student extends Person {

  12 function study() {

  13 echo "我是". parent::$country."人<br />";

  14 }

  15}

  16// 输出成员属性值

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

  18$p1 = new Person();

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

  20// 访问静态成员方法

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

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

  23$p1->myCountry();

  24

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

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

  27$t1 = new Student();

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

  29?>

  运行该例子,输出:

  中国

  我是中国人

  我是中国人

  中国

  我是中国人

 

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

  slef:: $country

  slef:: myCountry()

 

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

  parent:: $country

  parent:: myCountry()

 

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

  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、