ホームページ >バックエンド開発 >PHPチュートリアル >PHP クラスのサンプル チュートリアル: 抽象クラスと抽象メソッド

PHP クラスのサンプル チュートリアル: 抽象クラスと抽象メソッド

WBOY
WBOYオリジナル
2016-08-08 09:26:37867ブラウズ

abstract を使用してクラスまたはメソッドを変更できます。

abstract で変更されたクラスは、このクラスが抽象クラスであることを示し、abstract で変更されたメソッドは、このメソッドが抽象メソッドであることを示します。

抽象クラスはインスタンス化できません。

抽象メソッドにはメソッド宣言のみがあり、メソッドの実装内容はありません。

abstract 抽象クラス

abstract を使用してクラスを変更できます。

abstract で変更されたクラスは、このクラスが抽象クラスであることを示します。

抽象クラスはインスタンス化できません。

これは単純な抽象メソッドです。直接インスタンス化すると、システムはエラーを報告します。

<?php
//定义一个抽象类
abstract class User
{
	public function __toString() {
		return get_class($this);
	} 
}
//实例化这个类会出现错误
echo new User();
?>
以下の例の NormalUser は User クラスを継承しており、インスタンス化できます。
<?php
//定义一个抽象类
abstract class User
{
	public function __toString() {
		return get_class($this);
	} 
}
//实例化这个类会出现错误
echo new User();
class NormalUser extends User
{
}
$a = new NormalUser();
echo "这个类" . $a . "的实例";
?>
抽象クラスを単独で設定するのは意味がありません。抽象メソッドを使用してのみ、抽象クラスが血肉を持つことができます。以下に抽象メソッドを紹介します。

抽象抽象メソッド

このメソッドが抽象メソッドであることを示すには、抽象修飾クラスを使用します。

抽象メソッドにはメソッドの宣言部分のみがあり、メソッド本体はありません。

抽象メソッドには {} はありませんが、; で終わります。

クラス内に抽象メソッドが存在する限り、そのクラスは抽象クラスとして宣言する必要があります。

抽象メソッドはサブクラスでオーバーライドする必要があります。

以下は、setSal() と getSal() という 2 つの抽象メソッドを持つ抽象クラスです。 $sal 従業員の賃金を取得するために使用されます。

<?php
abstract class User
{
	protected $sal = 0;
	//这里定义的抽象方法。
	//注意抽象方法没有方法体,而且方法结束使用 ; 号。
	abstract function getSal();
	abstract function setSal();
	//定义它的__tostring方法
	public function __toString() {
		return get_class($this);
	} 
} 
?>
Userクラスは直接継承できないので、Userクラスを継承したNormalUserクラスを書きます。次のコードを記述すると、システムはエラーを報告します。 このエラーは、User クラスに 2 つの抽象メソッドがあり、サブクラスでこれら 2 つのメソッドをオーバーライドする必要があることを示しています。
<?php
abstract class User
{
	protected $sal = 0;
	//这里定义的抽象方法。
	//注意抽象方法没有方法体,而且方法结束使用 ; 号。
	abstract function getSal();
	abstract function setSal();
	//定义它的__tostring方法
	public function __toString() {
		return get_class($this);
	} 
}
class NormalUser extends User
{
}
?> 
次の例では、これら 2 つのメソッドを書き換えていますが、メソッド本体の {} の内容は空ですが、メソッドを書き換えているとみなすことができます。オーバーライドされるメソッドのパラメータ名に注意してください。パラメータの数が同じであれば、パラメータ名が同じである必要はありません。
<?php
abstract class User
{
	protected $sal = 0;
	//这里定义的抽象方法。
	//注意抽象方法没有方法体,而且方法结束使用;号。
	abstract function getSal();
	abstract function setSal();
	//定义它的__tostring方法
	public function __toString() {
		return get_class($this);
	} 
}
class NormalUser extends User
{
	function getSal() {
	}
	function setSal($sal) { 
	}
}
	//这样就不会出错了。
?>
以下の 19 ~ 21 行目では、書き込みと書き換えの 3 つのメソッドがエラーを報告します。

19行目、パラメータがありません。

20 行、より多くのパラメーター。

21行目、パラメータの型が間違っています。 (この書き方は後の章で紹介します)

クラス内に抽象メソッドがある場合、そのクラスは抽象クラスとして宣言する必要があります。

次のクラスは抽象クラスではないため、抽象メソッドが定義されており、エラーが報告されます。

<?php
class User
{
	protected $sal = 0;
	//这里定义的抽象方法。
	//注意抽象方法没有方法体,而且方法结束使用;号。
	abstract function getSal();
	abstract function setSal();
	//定义它的__tostring方法
	public function __toString() {
		return get_class($this);
	} 
}
	//这个类中有两个抽象方法,如果这个类不是抽象的。会报错
?>

抽象クラスは抽象クラスを継承します

抽象クラスが別の抽象クラスを継承する場合、その中の抽象メソッドを書き直す必要はありません。

抽象クラスでは、抽象親クラスの抽象メソッドをオーバーライドできません。

このような使用法は、抽象クラスの拡張として理解できます

次の例は、抽象クラスが別の抽象クラスから継承するときに、その中の抽象メソッドを書き直す必要がないことを示しています。

<?php  
abstract class User  
{  
    protected $sal = 0;  
    abstract function getSal();  
    abstract function setSal($sal);   
}  
abstract class VipUser extends User  
{  
}  
?>  

抽象クラスが継承された後は、その中の抽象メソッドをオーバーライドすることはできません。

書き換えが発生した場合、システムはエラーを報告します。

<?php
abstract class User
{
	protected $sal = 0;
	abstract function getSal();
	abstract function setSal($sal); 
}
abstract class VipUser extends User
{
	abstract function setSal(); 
}
?>

抽象クラスは抽象クラスを継承し、抽象クラスを拡張することを目的としています。

<?php
abstract class User
{
	protected $sal = 0;
	abstract function getSal();
	abstract function setSal($sal); 
}
abstract class VipUser extends User
{
	protected $commision = 0;
	abstract function getCommision();
	abstract function setCommision();
}
?>

PHP5.1では、抽象クラスで静的抽象メソッドがサポートされています。以下の例では、静的抽象メソッドを宣言できることがわかります。このメソッドを実装する場合は、静的メソッドである必要があります。

静的抽象メソッド

PHP5.1 では、静的抽象メソッドが抽象クラスでサポートされています。以下の例では、静的抽象メソッドを宣言できることがわかります。このメソッドを実装する場合は、静的メソッドである必要があります。

<?php
abstract class User
{
	protected static  $sal = 0;
	static abstract function getSal();
	static abstract function setSal($sal); 
}
class VipUser extends User
{
	static function getSal() {
		return self::$sal;
	}
	static function setSal($sal) {
		self::$sal = $sal;
	}
}
VipUser::setSal(100);
echo "you sal is " . VipUser::getSal();
?>
//这里的抽象方法好像没有问题 

転載元: http://blog.csdn.net/klinghr/article/details/5212952

以上、PHP クラスのサンプルチュートリアル: 抽象クラスと抽象メソッドを内容も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。