PHP面向对象(抽象类与抽象方法、接口的实现)

摘要:任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。定义为抽象的类不能被实例化。 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

一、抽象类与抽象方法

1,任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

2,定义为抽象的类不能被实例化。

3, 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 

4,必须在子类中将抽象类的全部抽象方法全部实现才可以

<?php 
// 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
abstract class Person // 定义为抽象的类不能被实例化。
{
  public $name;

  public function __construct($name)
  {
    $this->name = $name;
  }

  // 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 
  abstract protected function hello();

  abstract protected function say();

  public function show()
  {
    return "我的名字:".$this->name;
  }
}

class Worker extends Person
{
  // 必须在子类中将抽象类的全部抽象方法全部实现才可以
  public function hello()
  {
    return 'Hello '.$this->name;
  }

  public function say()
  {
    return 'Say '.$this->name;
  }

}

$worder = new Worker('小明');
echo $worder->hello(); // Hello 小明
echo '<hr>';
echo $worder->say(); // Say 小明
echo '<hr>';
echo $worder->show(); // 我的名字:小明
?>


二、接口的实现

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的属性是类常量,定义的所有方法都必须是公有的抽象方法,所以public 、abstract 可不写,这是接口的特性。

<?php 
interface Person1
{
  // 接口中定义的属性必须是:类常量
  const SITENAME = ‘我在学习PHP‘;
  // 接口中定义的所有方法都必须是公有的抽象方法,所以public 、abstract 可不写
  function show();
  function do();
}

interface Person2
{
  function hello();
}

// 接口不允许实例化,但可以被继承,创建一个类继承接口并实现所有的抽象方法
class Worker implements Person1,Person2
{
  public function show()
  {
    return self::SITENAME;
  }
  public function do()
  {
    return ‘我在写代码~~‘;
  } 
  public function hello()
  {
    return ‘PHP是非常好的一种语言~~‘;
  } 
}

$worker = new Worker();
echo $worker->show(); // 我在学习PHP
echo ‘<hr>‘;
echo $worker->do(); // 我在写代码~~
echo ‘<hr>‘;
echo $worker->hello(); // PHP是非常好的一种语言~~
?>


原文地址:https://www.cnblogs.com/dawuge/p/10480735.html  

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_2246