开启辅助访问
帐号登录 |立即注册

PHP面向对象编程之extends:继承详解

 
面向对象编程(OOP)的一大好处就是,可以使用一个类继承另一个已有的类,被继承的类称为父类或基类,而继承这个父类的类称为子类。子类可以继承父类的方法和属性,因此通过继承可以提高代码的重用性,也可以提高软件的开发效率。

子类可以增加父类之外的新功能,因此也可以将子类称为父类的“扩展”。此外,子类还可以继承父类的构造函数,当子类被实例化时,PHP 会先在子类中查找构造函数。如果子类有自己的构造函数,PHP 会先调用子类中的构造函数。当子类中没有时,PHP 则会去调用父类中的构造函数。

在 PHP 中,类的继承需要通过 extends 关键字来实现。语法格式如下所示:
class 子类名 extends 父类名{
    ... ...
}
【示例1】定义一个基类,使用另一类来继承这个基类,同时在尝试使用子类调用基类中的成员方法。
在 PHP 中,父类所有使用 public 修饰的成员,可以在同一个类中访问、子类中访问、在类的外部访问
<?php
    class Website{
        public $name, $url, $title;
        public function __construct(){
            echo '------基类中的构造函数------<br>';
        }
        public function demo(){
            echo '基类中的成员方法<br>';
        }
    }
    class ClassOne extends Website{
    }
    class ClassTwo extends Website{
        public function __construct(){
            echo '------子类中的构造函数------<br>';
        }
    }
    $object = new ClassOne();
    $object -> demo();
    $object2 = new ClassTwo();
    $object2 -> demo();
?>
运行结果如下:
------基类中的构造函数------
基类中的成员方法
------子类中的构造函数------

基类中的成员方法

【示例2】将上面示例的代码略作调整,演示类中 protected 成员的继承情况。
受保护的成员不可以在类外部访问到,但是可以在子类的内部访问,也是就说我们可以在子类设置一个成员函数来访问这个受保护成员。
在 PHP 中,父类所有使用 protected 修饰的成员,可以在同一个类中访问、子类中访问、不能在在类的外部访问
<?php
    class Website{
        public $name, $url, $title;
        public function __construct(){
            echo '------基类中的构造函数------<br>';
        }
        protected function demo(){
            echo '基类中的成员方法<br>';
        }
    }
    class ClassOne extends Website{
    }
    class ClassTwo extends Website{
        public function __construct(){
            echo '------子类中的构造函数------<br>';
        }
        public function test(){
            $this -> demo();
        }
    }
    $object = new ClassOne();
    // $object -> demo();      // 在子类中调用父类使用 protected 修饰的成员方法会报错
    $object2 = new ClassTwo();
    $object2 -> test();
?>
运行结果如下:
------基类中的构造函数------
------子类中的构造函数------
基类中的成员方法
在子类中调用父类使用 protected 修饰的成员方法会报错,如果去掉上面代码中第 26 行的注释,程序会报错并停止运行,如下所示:
Fatal error: Uncaught Error: Call to protected method Website::demo() from context '' ··· ···

【示例3】类中使用 private 修饰的成员被称为私有成员。父类中的私有成员不会被子类继承,因此不能被子类访问到,下面来看一个示例。
在 PHP 中,父类所有使用 private 修饰的成员,可以在同一个类中访问、不能在子类中访问、不能在类的外部访问
<?php
    class Website{
        private function demo(){
            echo '基类中的成员方法<br>';
        }
    }
    class ClassOne extends Website{
        public function test(){
            $this -> demo();
        }
    }
    $object = new ClassOne();
    $object -> test();
?>
运行结果如下:
Fatal error: Uncaught Error: Call to private method Website::demo() from context 'ClassOne' ··· ···

在子类中调用父类中使用 private 关键字修饰的成员时,程序会报错并终止运行。



回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

友情链接
  • 艾Q网

    提供设计文章,教程和分享聚合信息与导航工具,最新音乐,动漫,游戏资讯的网站。