ホームページ > バックエンド開発 > PHPチュートリアル > PHPオブジェクト指向抽象クラスの詳しい解説(コード例)

PHPオブジェクト指向抽象クラスの詳しい解説(コード例)

易达
リリース: 2023-04-08 17:28:01
オリジナル
2274 人が閲覧しました

この記事の目的:

1. PHP における抽象クラスの定義を理解する

2. PHP における抽象クラスの役割を理解する

3. PHP における抽象クラスの機能 使用シナリオ

4. PHP における抽象クラスの具体的な実装をマスターする

これまでの一貫した考え方を踏襲しつつ、3W1H の手法で学習していきますので、まずは理解しましょうそれ

(1) PHP の抽象クラスの定義を理解する (何を)

##抽象クラス # は、分析と設計を特徴付けるためによく使用されます。 Abstract Concept は、見た目は異なっていても本質的には同じである一連の特定の概念の Abstract です。通常、プログラミング ステートメントで抽象を使用して変更されるクラスは、抽象クラスです。

#インターフェースとインターフェースの違いは、インターフェースのメソッドは実装されておらず、単に定義されているだけですが、メソッドは抽象クラスにあることです。の実装が可能です。

(2) PHP における抽象クラスの役割を理解する (理由)

PHP のクラスの中には、常に書き換えられるクラスが多くあります。抽象クラス、どうやって作るの?つまり、最初にパブリック クラスを作成し、インスタンス化した後に繰り返し呼び出すことができます。これにより、コードの再利用性が向上します

(3) PHP の抽象クラスの使用シナリオを理解する (場所)

1. コード内の多くのクラスが類似のメソッドまたは共通のメソッドがある場合、これらの同じメソッドまたは類似のメソッドを抽出し、それらを抽象クラスにカプセル化できます。

抽象クラスとインターフェイスは似ています。インターフェイスは特別な抽象クラスであると言えますが、インターフェイスは抽象メソッドでいっぱいです (いわゆる抽象とは、特定の実装がないことを意味します)。

(4) PHP で抽象クラスの具体的な実装をマスターする (方法)

概要:

1. 概要クラス 定義は、抽象クラス クラス名 {}

2 などの抽象を通じて定義されます。抽象クラスのメソッドの定義も、抽象パブリック関数メソッド名 (){} などの抽象を通じて定義されます。

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


4. 抽象クラスを継承するには、キーワード extends を使用します

5. 抽象クラスのサブクラスは、以下のものを実装する必要があります。抽象クラスには実装されていません。すべてのメソッド、つまり、抽象クラスのすべての抽象メソッドを書き換えます

6。抽象クラスのサブクラスは、抽象クラスに実装されているメソッドを実装しませんが、抽象クラスであっても、これらのメソッドを呼び出すことができます。実際、継承と組み合わせることで、これを非常によく理解できます。

すべての要約は実践を通じて得られます。次に、実践を使用して要約を示します。明確で直観的な

(5)、具体的なコード

ケース 1、

実践目標:

1. 抽象クラスの定義は、抽象クラスのクラス名 {}

2. 抽象クラスの定義など、abstract によって定義されます。メソッドは、抽象パブリック関数メソッド名 (){} などの抽象によっても定義されます。

具体的なコードは次のとおりです:

<?php
abstract class Animal{
    abstract public function eat();//抽象方法
    //呼吸
    public function breath(){
        //所有动物的呼吸方法都是一样的,就不需要使用多态了
        echo "呼吸<br/>";
    }
}
?>
ログイン後にコピー

ケース 2、

実践的な目標:

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

の具体的なコードは次のとおりです:

<?php
abstract class Animal{
    abstract public function eat();//抽象方法
    //呼吸
    public function breath(){
        //所有动物的呼吸方法都是一样的,就不需要使用多态了
        echo "呼吸<br/>";
    }
}
$animal = new Animal();
?>
ログイン後にコピー

実行結果は次のとおりです:

Fatal error: Uncaught Error: Cannot instantiate abstract class Animal in D:\E-class\class-code\classing\index.php:10 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 10

案例四、

实践目标:

1、要继承一个抽象类,通过关键字extends

2、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法

具体代码如下:

<?php
abstract class Animal{
    abstract public function eat();//抽象方法
    //呼吸
    public function breath(){
        //所有动物的呼吸方法都是一样的,就不需要使用多态了
        echo "呼吸<br/>";
    }
}
//定义猴子
class Monkey extends Animal{
    
}
?>
ログイン後にコピー

如果Monkey类继承了抽象类,但不实现里面的abstract方法,那么运行结果为:

Fatal error: Class Monkey contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Animal::eat) in D:\E-class\class-code\classing\index.php on line 13

接下来我们来实现abstract方法

具体代码如下:

<?php
abstract class Animal{
    abstract public function eat();//抽象方法
    //呼吸
    public function breath(){
        //所有动物的呼吸方法都是一样的,就不需要使用多态了
        echo "呼吸<br/>";
    }
}
//定义猴子
class Monkey extends Animal{
    //实现抽象类中的抽象方法
    public function eat(){
        echo "我是猴子类中的eat方法<br/>";
    }
}
$monkey = new Monkey();
$monkey->eat();

?>
ログイン後にコピー

运行结果如下:

我是猴子类中的eat方法

案例五、

实践目标:

1、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点

具体代码如下:

<?php
abstract class Animal{
    abstract public function eat();//抽象方法
    //呼吸
    public function breath(){
        //所有动物的呼吸方法都是一样的,就不需要使用多态了
        echo "抽象类中的呼吸方法<br/>";
    }
}
//定义猴子
class Monkey extends Animal{
    //实现抽象类中的抽象方法
    public function eat(){
        echo "我是猴子类中的eat<br/>";
    }
}
$monkey = new Monkey();
$monkey->eat();
$monkey->breath();
?>
ログイン後にコピー

运行结果如下:

我是猴子类中的eat
抽象类中的呼吸方法

(六)、学以致用

问题:将以下真实场景,用抽象类还原出来

小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,抱起了小狗,最后,小芳和小狗亲了一口

思路分析:

1、对象分析:学生,小狗

2、对象属性分析:结合(现实世界+具体场景)

学生:名称

狗:名称

3、对象方法分析:结合(现实世界+具体场景)

学生:

(1)、放学

(2)、回到家中

(3)、走路

(4)、看

(5)、笑

(6)、抱东西

(7)、亲嘴

狗:

(1)、看

(2)、摇尾巴

(3)、亲嘴

4、我们发现这2个对象都有相似的方法,看,亲嘴,所以我们可以把它们封装到抽象类中,并且这2个方法不需要子类去重写,因为都是一样的

具体代码如下:

<?php
abstract class Animal{
    //看
    public function look($obj){
        //所有动物的呼吸方法都是一样的,就不需要使用多态了
        echo "看见了".$obj->name."<br/>";
    }
    //亲嘴
    public function kiss($fromobj,$toobj){
        echo $fromobj->name."亲了".$toobj->name."一口<br/>";
    }
    
}
//学生
class Student extends Animal{
   public $name = "";
   public function __construct( $name ){
       $this->name = $name;
   }
    // 1、放学
   public function offschool(){
       echo $this->name."放学了<br/>";
   }
   //回家
   public function goHome(){
    echo $this->name."回到家中<br/>";
   }
    // 2、走路
    public function walk(){
        echo $this->name."走了过去<br/>";
    }
    // 3、看

    // 4、笑
    public function smile(){
        echo $this->name."微笑了<br/>";
    }
    // 5、抱东西
    public function hug($obj){
        echo $this->name."抱起了".$obj->name."<br/>";
    }
    // 6、亲嘴
   
}
//狗
class Dog extends Animal{
   public $name = "";
   public function __construct( $name ){
       $this->name = $name;
   }
    //1、看

    //2、摇尾巴
    public function wagTail(){
        echo $this->name."摇了尾巴<br/>";
    }

    //3、亲嘴
}
//创建对象
$xf = new Student("小芳");
$dog = new Dog("小爱");
//小芳放学了
$xf->offschool();
//小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,
//抱起了小狗,最后,小芳和小狗亲了一口
//小芳回答家中
$xf->goHome();
//小芳看见小狗
$xf->look($dog);
//小狗摇尾巴
$dog->wagTail();
//小芳笑了笑
$xf->smile();
//小芳走过去
$xf->walk();
//抱起小狗
$xf->hug($dog);
//小芳亲了小狗
$xf->kiss($xf,$dog);
//小狗也亲了小芳
$dog->kiss($dog,$xf);
?>
ログイン後にコピー

运行结果为:

シャオファンは放課後です
シャオファンは家に帰ります
シャオ・アイが見えます
シャオファンは震えています彼女のしっぽ
シャオファンは微笑んだ
シャオファンは歩いて行きました
シャオファンはシャオアイを抱きしめました
シャオファンはシャオにキスしましたAi
Xiao Ai Kissed Xiao Fang

(7)、概要

1. この記事では主に定義、機能、具体的な内容について説明します。 PHP での抽象クラスの実装

この記事が少しでもお役に立てれば幸いです。ありがとうございます。 ! !

以上がPHPオブジェクト指向抽象クラスの詳しい解説(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート