012

类的变量与成员,及其继承、访问与重写时——要注意的问题
时间: 2016-08-10 16:31  作者:admin  阅读:(2842)

本文纯属于个人理解,欢迎吐槽

一、成员访问控制的使用注意


Public:      可以继承,可以在类的方法之外被访问


Protected:可以继承,并且里面的protected属性和方法可以被重写,不可以在   类的方法之外被访问,可以通过public方法调用protected控制的成   员;


Private:    不可以继承,不可以在类的方法之外访问,可以通过public方法调用   private控制的成员属性;


这三个访问控制关键字也可以修饰构造函数

      当private 和 protected 修饰类的构造函数时,你只能通过一个 public static 的静态方法来调用构造函数以实例化对象,因为构造函数无法在类之外被访问了,比如单例类的实现。


单例的三个要点:

      1.需要一个保存类的唯一实例的静态成员变量:

protected static $ob="";

2.构造函数和克隆函数必须声明为私有的或受保护的,防止外部程序               new类从而失去单例模式的意义:

private function __construct(){};

private function __clone(){};

3.必须提供一个访问这个实例的公共的静态方法(通常为getInstance           方法),从而返回唯一实例的一个引用 

public static function getInstance(){};


二、类中的三个关键字的使用注意:


三个关键字分别为:final、static、const:


Final关键字:

1.只能标识类和类的方法,不能标识类的属性。

2.final标识的类不能被继承,被标识的类为最终版本,不能有子类。

3.final标识的方法,在子类中不能被重写覆盖,该方法也是最终方法。


Static关键字:

1.Static可以修饰类的属性和方法,被static标识的成员只属于类,不属于对象;


2.在类中访问静态成员用:self::属性名或方法名,或者类名::属性名或方法名;

   在类外访问静态成员用:类名::属性名或方法名;


3.Static标识的静态方法只能访问静态成员;

  因为非静态成员只能用$this来访问,而使用$this就必须有对象引用。

  但是,在非静态方法中可以使用类名或者self方法访问静态成员;


4.类中的静态属性很类似于函数的全局变量;


5.Static不能标识构造函数。


Const关键字:

1.Php中定义常量用define(),在类中只能用const关键字;


2.访问方式和静态成员一样,类中用类名或self,类外用类名,同样不能使用$this;


3.声明和访问类常量不能使用$,而静态属性需要$,$this访问静态属性不需要$;


4.通常类常量的声明使用大写;


5.标识的常量不能被重新赋值,但可以被子类重写重新赋值;


6.类常量默认的就是public访问权限,但在声明时不要加public,类常量可以继承;


三、引用关键字的使用注意:


$this:$this 指向类的实例


Parent:指向父类,可以访问父类的静态常量、静态属性(parent::$xxx) ,不能访问父类的非静态属性 ,可以调用父类静态和非静态的方法(但不能是 private 方法)


Self:self 指向定义了当前被调用的方法的类,用于访问静态成员和类的常量

四、在继承中重写的注意问题:


重写的成员的访问控制范围不能被缩小;

     例如, public 的成员不能重写为 protected


非静态成员不能重写为静态成员,静态成员也不能重写为非静态成员







用户登录


     QQ登录


关注我




我的标签


随机文章


友情链接