如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
继承
- 1个子类只能继承一个父类,1个父类让多个子类继承
- 如果子类继承了父类,子类就具有了父类的属性与方法
- 如果子类的属性或方法名与父类相同时,如果子类的开放性大于(等于)父类的,覆盖或重写 ,反之报错
继承的作用
- 提高重用性
- 方便扩展
- 方便升级
继承的特性
继承的特性一
单继承
1个父类可有多个子类
1个子类只能有1个父类
继承的特性二
如果子类中的方法或属性和父类的名称相同,属性会覆盖或方法的重写,且只对子类有效
重写
子类可以重写父类的属性和方法,也可以修改访问控制符,但是只能重等级高的改成等级低的,不能有低到高,建议一般不要修改访问控制符
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:当前类的静态成员于常量
类名:调用本类变量/常量/方法
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();
链式操作
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