1. 程式人生 > >PHP學習——28 PHP面向物件(抽象類與抽象方法、介面的實現)

PHP學習——28 PHP面向物件(抽象類與抽象方法、介面的實現)

一、抽象類與抽象方法

<?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是非常好的一種語言~~
?>