小白教程

 找回密码
 立即注册
小白教程 首页 系列教程 PHP系列教程 查看内容

PHP 面向对象

发布者: 小白教程



Final 关键字

PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

以下代码执行会报错:

  1. <?php
  2. class BaseClass {
  3. public function test() {
  4. echo "BaseClass::test() called" . PHP_EOL;
  5. }
  6. final public function moreTesting() {
  7. echo "BaseClass::moreTesting() called" . PHP_EOL;
  8. }
  9. }
  10. class ChildClass extends BaseClass {
  11. public function moreTesting() {
  12. echo "ChildClass::moreTesting() called" . PHP_EOL;
  13. }
  14. }
  15. // 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
  16. ?>

调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

  1. <?php
  2. class BaseClass {
  3. function __construct() {
  4. print "BaseClass 类中构造方法" . PHP_EOL;
  5. }
  6. }
  7. class SubClass extends BaseClass {
  8. function __construct() {
  9. parent::__construct(); // 子类构造方法不能自动调用父类的构造方法
  10. print "SubClass 类中构造方法" . PHP_EOL;
  11. }
  12. }
  13. class OtherSubClass extends BaseClass {
  14. // 继承 BaseClass 的构造方法
  15. }
  16. // 调用 BaseClass 构造方法
  17. $obj = new BaseClass();
  18. // 调用 BaseClass、SubClass 构造方法
  19. $obj = new SubClass();
  20. // 调用 BaseClass 构造方法
  21. $obj = new OtherSubClass();
  22. ?>

执行以上程序,输出结果为:

1234567

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 01:46 , Processed in 0.017472 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部