如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
继承
- 1个子类只能继承一个父类,1个父类让多个子类继承
- 如果子类继承了父类,子类就具有了父类的属性与方法
- 如果子类的属性或方法名与父类相同时,如果子类的开放性大于(等于)父类的,覆盖或重写 ,反之报错
继承的作用
- 提高重用性
- 方便扩展
- 方便升级
继承的特性
继承的特性一
单继承
1个父类可有多个子类
1个子类只能有1个父类
继承的特性二
如果子类中的方法或属性和父类的名称相同,属性会覆盖或方法的重写,且只对子类有效
重写
子类可以重写父类的属性和方法,也可以修改访问控制符,但是只能重等级高的改成等级低的,不能有低到高,建议一般不要修改访问控制符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Person { public $name='zz'; private $age=18; public function say(){ echo $this->name; } } class A extends Person { // private $name='xx';//直接爆红 public $age='19'; public function say(){ echo "age:".$this->age; } } $a = new A; echo $a->say(); |
操作符::
只能在类内部使用
作用:在没有声明任何实例的情况下访问类中的成员方法与属性
parent:调用父类的成员变量/方法/常量,父类私有的方法不能被继承
self:当前类的静态成员于常量
类名:调用本类变量/常量/方法
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 |
class Person { private $name='cc'; public $age; public function say(){ echo $this->name; } public function __construct(){ echo "this is a ".$this->name; } } class A extends Person { const BIRTH = '1125'; private $sex = '女'; public function __construct(){ parent::__construct();//调用父类的构造方法 echo self::BIRTH;//1125 } } $a = new A; $a->say(); |
链式操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Num { public $a = 10; public function plus($num){ $this->a =$this->a+$num; return $this->a; } public function plus1($num){ $this->a =$this->a+$num; return $this; } } $a = new Num(); var_dump($a->plus(12));///返回int(22) var_dump($a->plus1(12));//object(Num)#1 (1) { ["a"]=> int(34) } var_dump($a->plus1(10)->plus1(10)->plus(10));// 最后输出就好 int(64) |
访问级别
访问级别 public private protected
内部 Y Y Y
外部 Y N N
子类 Y N Y