轻松上手,快乐学习!

PHP 教程

PHP 教程PHP 简介PHP 下载安装PHP 语法PHP 注释PHP 变量PHP Echo / PrintPHP 数据类型PHP 字符串PHP 数值PHP MathPHP 常量PHP 运算符PHP If...ElsePHP SwitchPHP 循环While 循环Do While 循环For 循环Foreach 循环Break/ContinuePHP 函数PHP 数组索引数组关联数组多维数组数组排序PHP 全局变量$GLOBALS$_SERVER$_REQUEST$_POST$_GETPHP 正则表达式PHP 表单处理PHP 表单验证PHP 表单验证必填字段PHP 表单验证URL/E-mailPHP 表单验证实例PHP 日期和时间PHP IncludePHP 文件处理PHP 文件打开/读取PHP 文件创建/写入PHP 文件上传PHP CookiesPHP SessionsPHP FiltersPHP Filters AdvancedPHP 回调函数PHP JSONPHP 异常处理PHP 什么是 OOPPHP 类和对象PHP 构造函数PHP 析构函数PHP 访问修饰符PHP 继承PHP 类常量PHP 抽象类PHP 接口PHP 特征PHP 静态方法PHP 静态属性PHP 命名空间PHP 可迭代对象MySQL DatabaseMySQL ConnectMySQL Create DBMySQL Create TableMySQL Insert DataMySQL Get Last IDMySQL Insert MultipleMySQL PreparedMySQL Select DataMySQL WhereMySQL Order ByMySQL Delete DataMySQL Update DataMySQL Limit DataPHP XML ParsersPHP SimpleXML ParserPHP SimpleXML - GetPHP XML ExpatPHP XML DOMAJAX IntroAJAX PHPAJAX DatabaseAJAX XMLAJAX Live SearchAJAX PollPHP 实例PHP 编译器PHP 测验PHP 练习

PHP 参考手册

PHP 概述PHP ArrayPHP CalendarPHP DatePHP DirectoryPHP ErrorPHP ExceptionPHP FilesystemPHP FilterPHP FTPPHP JSONPHP KeywordsPHP LibxmlPHP MailPHP MathPHP MiscPHP MySQLiPHP NetworkPHP Output ControlPHP RegExPHP SimpleXMLPHP StreamPHP StringPHP Variable HandlingPHP XML ParserPHP ZipPHP Timezones


PHP OOP – 继承


PHP - 什么是继承?

OOP 中的继承 = 当一个类派生自另一个类时。

子类将从父类继承所有公共和受保护的属性和方法。 此外,它还可以有自己的属性和方法。

继承的类是通过使用 extends 关键字定义的。

我们来看一个例子:

实例

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();
?>
亲自试一试 »

实例解析

Strawberry 类继承自 Fruit 类。

这意味着由于继承,Strawberry 类可以使用公共的 $name 和 $color 属性以及来自 Fruit 类的公共 __construct() 和 intro() 方法。

Strawberry 类也有自己的方法:message()。


PHP - 继承和受保护的访问修饰符

在上一章中,我们了解到 protected 属性或方法可以在类内以及从该类派生的类中访问。 这是什么意思?

我们来看一个例子:

实例

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}

// Try to call all three methods from outside class
$strawberry = new Strawberry("Strawberry", "red");  // OK. __construct() is public
$strawberry->message(); // OK. message() is public
$strawberry->intro(); // ERROR. intro() is protected
?>
亲自试一试 »

在上面的示例中,我们看到如果我们尝试从类外部调用 protected 方法 (intro()),我们将收到错误消息。 public 方法可以正常工作!

让我们看另一个例子:

实例

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
    // Call protected method from within derived class - OK
    $this -> intro();
  }
}

$strawberry = new Strawberry("Strawberry", "red"); // OK. __construct() is public
$strawberry->message(); // OK. message() is public and it calls intro() (which is protected) from within the derived class
?>
亲自试一试 »

在上面的示例中,我们看到一切正常! 这是因为我们从派生类内部调用了protected方法(intro())。


PHP - 覆盖继承的方法

可以通过重新定义子类中的方法(使用相同的名称)来覆盖继承的方法。

看下面的例子。 子类 (Strawberry) 中的 __construct() 和 intro() 方法将覆盖父类 (Fruit) 中的 __construct() 和 intro() 方法:

实例

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.";
  }
}

$strawberry = new Strawberry("Strawberry", "red", 50);
$strawberry->intro();
?>
亲自试一试 »

PHP - final 关键字

final 关键字可用于防止类继承或方法覆盖。

下面的例子展示了如何防止类继承:

实例

<?php
final class Fruit {
  // some code
}

// will result in error
class Strawberry extends Fruit {
  // some code
}
?>
亲自试一试 »

以下示例显示了如何防止方法覆盖:

实例

<?php
class Fruit {
  final public function intro() {
    // some code
  }
}

class Strawberry extends Fruit {
  // will result in error
  public function intro() {
    // some code
  }
}
?>
亲自试一试 »