php对象之静态方法和属性

      我们把类当生成对象的模版,把对象作为活动组件,对象的方法可以被调用,对象的属性可以被访问。面向对象编程中实际操作都是通过类的实例(而不是类本身)完成的。但是,我们也可以通过类来访问对象的方法和属性,这样的方法和属性是“静态的”,必须用static关键字声明。

 1 <?php
 2 class StaticExample
 3 {
 4       static public $num = 0;
 5       static public function sayHello()
 6       {
 7              echo "hello world";
 8       }
 9 }
10 echo StaticExample :: $num;
11 StaticExample :: sayHello();
12 ?>

      一个子类可以使用parent关键字可以访问父类,而不使用其类名。要从当前类中访问静态方法和属性,可以使用self关键字。self指向当前类,就像伪变量$this指向当前对象一样。

     根据定义,我们不能再对象中调用静态方法,因此静态方法和属性又被称为类变量和属性,因此不能再静态方法中使用伪变量$this。

     我们为什么要用静态方法和属性呢?

     首先,他们在代码中的任何地方都可以用(假设你可以访问该类)。也就是说,你不需要在对象间传递类的实例,也不需要将实例放到全局变量中,就可以访问类中的方法。

     其次,类的每个实例都可以访问类中定义的静态方法,所以你可以利用静态属性来设置改值,改值可以被类的所有对象使用。

     最后,不需要实例对象就可以访问静态方法和属性。

    PHP类中的常量属性

    PHP 5可以在类中定义常量属性。和全局常量一样,类常量一旦设置后就不能改变。常量属性用const关键字声明。常量不像常规属性那样以美元符号开头。按照惯例,只能以大写字母命名常量。

    

 1 <?php
 2 class Example
 3 {
 4       const  AVAILABLE    = 0;
 5       const  OUT_OF_STOCK = 1;
 6      //   ...
 7 }
 8 
 9 print Example :: AVAILABLE;
10 ?>

    常量属性只包括基本数据类型。不能将一个对象指派给常量。像静态属性一样,只能通过类而不能通过类的实例访问常量属性。

<<因果&矛盾>>
原文地址:https://www.cnblogs.com/bridger/p/2714795.html