抽象クラスは、クラスを定義するとき、abstract
キーワードを前に付けて定義する。抽象クラスは、インスタンスを作れない。
抽象メソッドは、メソッドを定義するとき、abstract
キーワードを前に付けて定義する。抽象メソッドを持つクラスは、抽象クラスでなければならない。抽象メソッドは、実装を定義できないので、実装は、子クラスにおいて、必ず定義しなければならない。
書式
abstract class クラスA // 抽象クラスを定義
{
abstract function メソッドA( 引数 ); // 子クラスで、抽象メソッドである「メソッドA」を必ず定義しなければならない
function メソッドB() { // メソッドを定義
// メソッド内処理文;
}
}
class クラスB extends クラスA // 「クラスA」を継承し、「クラスB」を定義
{
function メソッドA() { // 抽象メソッドである「メソッドA」を定義
// メソッド内処理文;
}
}
$オブジェクト変数名 = new クラスB(); // 「クラスB」のインスタンスを作成
$オブジェクト変数名->メソッドA(); // メソッドAを呼び出す
$オブジェクト変数名->メソッドB(); // メソッドBを呼び出す
{
abstract function メソッドA( 引数 ); // 子クラスで、抽象メソッドである「メソッドA」を必ず定義しなければならない
function メソッドB() { // メソッドを定義
// メソッド内処理文;
}
}
class クラスB extends クラスA // 「クラスA」を継承し、「クラスB」を定義
{
function メソッドA() { // 抽象メソッドである「メソッドA」を定義
// メソッド内処理文;
}
}
$オブジェクト変数名 = new クラスB(); // 「クラスB」のインスタンスを作成
$オブジェクト変数名->メソッドA(); // メソッドAを呼び出す
$オブジェクト変数名->メソッドB(); // メソッドBを呼び出す
抽象クラスである「クラスA」のインスタンスは作れない。
抽象メソッドである「メソッドA」は、抽象メソッドを持つ抽象クラスの子クラスである「クラスB」で必ず定義する。
サンプル
<?php
abstract class echoTaxClass
{
abstract protected function func_tax( $var );
function func_echo( $var ) {
echo '税込:' . $this->func_tax( $var ) . '円<br />';
echo '税率:' . $this->varTax * 100 . '%<br /><br />';
}
}
class taxClass5 extends echoTaxClass
{
public $varTax = 0.05;
protected function func_tax( $var ) {
return $var * ( 1 + $this->varTax );
}
}
class taxClass7 extends echoTaxClass
{
public $varTax = 0.07;
public function func_tax( $var ) {
return $var * ( 1 + $this->varTax );
}
}
$var_class = new taxClass5();
$var_class->func_echo( 100 );
$var_class = new taxClass7();
$var_class->func_echo( 100 );
?>
abstract class echoTaxClass
{
abstract protected function func_tax( $var );
function func_echo( $var ) {
echo '税込:' . $this->func_tax( $var ) . '円<br />';
echo '税率:' . $this->varTax * 100 . '%<br /><br />';
}
}
class taxClass5 extends echoTaxClass
{
public $varTax = 0.05;
protected function func_tax( $var ) {
return $var * ( 1 + $this->varTax );
}
}
class taxClass7 extends echoTaxClass
{
public $varTax = 0.07;
public function func_tax( $var ) {
return $var * ( 1 + $this->varTax );
}
}
$var_class = new taxClass5();
$var_class->func_echo( 100 );
$var_class = new taxClass7();
$var_class->func_echo( 100 );
?>
↓↓↓出力結果↓↓↓
税込:105円
税率:5%
税込:107円
税率:7%
税率:5%
税込:107円
税率:7%