时间:2021-07-01 10:21:17 帮助过:24人阅读
这篇文章主要介绍了关于php面向对象之继承,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
继承
子类继承父类所有的——公有(public) 和 受保护(protected)属性和方法。
使用关键字extends
继承,一个类集成另一个,不能继承多个。
子类、父类、基类、超类、派生类
子类、派生类 ——> 继承于基类的类;
父类、基类、超类指 ——> 被继承的类。
<?php class Father { public $a = 'public'; protected $b = 'protected'; private $c = 'private'; public function func1() { echo 'This is public function','<br/>'; } protected function func2() { echo 'This is protected function','<br/>'; } private function func3() { echo 'This is private function','<br/>'; } } // 继承父类 class Child extends Father { // 子类中调用继承来的方法 public function test() { $this -> func1(); $this -> func2(); //$this -> func3(); 私有方法不可以调用 } } // 实例化子类 $son = new Child(); // 尝试调用属性 echo $son -> a,'<br/>'; //echo $son->b; 不能直接输出b //echo $son -> c; 继承都没继承,当然不能输出 // 尝试调用方法 //$son -> func1(); //$son -> func2(); 不能在类外调用func2 //$son -> func3(); 继承都没继承,当然不能调用 // 间接调用继承自父类的普通方法 $son -> test();
重写
1)继承父类的方法,子类中定义与父类同名的方法,且参数个数相同;
2)当子类重写父类中的方法时,php不会调用父类中被重写的方法;
3)是否调用父类的方法,取决于子类。
4)在实行方法覆盖的时候,访问修饰符可以是不一样的,但是子类的访问范围必须大于等于父类的访问范围。
parent:: 访问父类中被重写的属性和方法
<?php class Father { public function shuo($num) { echo 'a a o o'; } } class Son extends Father { public function shuo($num) { // 调用父类中被重写的方法 // parent::shuo($num); echo 'Hello World'; } public function test($num) { parent::shuo($num); } } // 实例化子类 $son1 = new Son(); $son1 -> shuo(1); // Hello World $son1 -> test(1); // a a o o
final关键字
如果父类中的方法被声明为final,则子类无法复写该方法。
如果一个类被声明为final,则不能被继承。
<?php class Father { final public function test() { echo 'hello'; } } class Son extends Father { public function test() { echo '你好'; } } // 实例化子类 $son1 = new Son(); $son1 -> test(); // 报错,函数不能被重写
相关推荐:
php面向对象之重载
php面向对象之封装
以上就是php面向对象之继承的详细内容,更多请关注Gxl网其它相关文章!