🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 公共的:`public` * 可以在程序中的任何位置(类内、类外)被其他的类和对象调用。子类可以继承和使用父类中所有的公共成员 ## 公共的:`private` * 被private修饰的变量和方法,只能在所在的类的内部被调用和修改,不可以在类的外部被访问。在子类中也不可以 ## 公共的:`protected` * 用protected修饰的类成员,可以在本类和子类中被调用,但是在其他地方不能被调用 ## 判断对象类:`instanceof` * 判断一个对象是否是某个类的实例 * 判断一个对象是否实现了某个接口 ## 接口类: `interface` * 继承它的子类必须实现 接口类的所有方法 * 使用`implements`继承 ``` interface Shop { public function buy($gid); public function sell($gid); public function view($gid); } ``` ## 抽象类 : `abstract` * 定义为抽象的类不能被实例化 * 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。 * 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 * 子类必须定义父类中的所有抽象方法;另外,这些方法的`访问控制`必须和父类中一样(或者更为宽松) * 使用`extends` ``` abstract class AbstractClass {  // 强制要求子类定义这些方法     abstract protected function getValue();     abstract protected function prefixValue($prefix);     // 普通方法(非抽象方法)     public function printOut() {         print $this\->getValue() . "\\n";     } } ``` ## 多继承: `trait` * 通过在类中使用`use` 关键字,声明要组合的`trait`名称,具体的`trait`的声明使用`trait`关键词. * `php5.4`开始引入`trait`, 其目的就是在于减少代码的重复,增加代码的复用性。 * `Trait`不能实例化 * 优先级:自身方法>`trait`的方法>继承的方法 ``` // 定义 trait 类 和方法 trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } } class ezcReflectionMethod extends ReflectionMethod { // 通过use关键字继承trait类, 来执行方法, 优先级为: 自身方法 > trait方法 > 继承方法 use ezcReflectionReturnInfo; /* ... */ } ``` ## 最终类、方法:`final` * 不能用来修饰成员属性 * `final` 类 --- 不可被继承。 * `final` 方法---不可被覆盖。