ホームページ > バックエンド開発 > PHPチュートリアル > PHP のオブジェクト指向プログラミングについての簡単な説明

PHP のオブジェクト指向プログラミングについての簡単な説明

不言
リリース: 2023-03-23 11:44:01
オリジナル
11550 人が閲覧しました

この記事で共有する内容は、PHP オブジェクト指向プログラミングについての簡単な説明です。必要な方は参考にしてください。

1. 2. PHP 高度なオブジェクト指向プログラミングの実践

知識ポイント: クラスの継承、メソッドのオーバーライド、アクセス制御、静的キーワード、final キーワード、データ アクセス、インターフェイス、ポリモーフィズム、抽象クラス

2.1、クラスの継承: キーの拡張言葉

例えば、オペレーター、ホスト、人間と同じ行動方法を持っていますが、それぞれが異なる専門性を持っています。したがって、プログラミング時にそれらの親クラスを作成し、継承する必要があります。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<?php

/*

*    通过对象的编程方式,可将实现生活中的一切事物以对象的形式表现出来。便于理解、维护、扩展等;

*    本示例:定义一个“人”类

*    $name : 对象中的成员属性,在此类中表示人的姓名

*    say() : 对象中的成员方法,在此类中表示人说话的方法

*    $this : PHP中的伪变量,表示自身的类

*    __construct() : php中的魔术方法,构造函数,在实例化类时自动执行

*    __destruct() : php中的魔术方法,析构函数,当类调用完成后自动执行

*/

class Human

{

    public $name;

    public $sex;

    public $age;

    public function __construct($name,$sex,$age)

    {

        $this->name = $name;

        $this->sex = $sex;

        $this->age = $age;

    }

    public function say()

    {

        echo &#39;大家好,我的名字叫&#39;.$this->name.&#39;,今年&#39;.$this->age.&#39;岁,我的性别是&#39;.$this->sex;

    }

    public function __destruct()

    {

        $this->name = null;

        $this->sex = null;

        $this->age = null;

    }

}

//实例化“人”类

$male = new Human("张三","男","20");

//调用“人”类说话的方法

$male->say();

 

//输出结果:大家好,我的名字叫张三,今年20岁,我的性别是男

?>

ログイン後にコピー

2.2. メソッドの書き換え: サブクラスは親クラスのメソッドを書き換えます

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<?php

/*

*    创建一个“人”类做为父类,继承的子类都拥有其父类的成员属性、方法

*/

class Human

{

    public $name;

    public function say()

    {

        echo "父类说话的方法,姓名:".$this->name."\n";

    }

    public function eat()

    {

        echo "父类吃饭的方法\n";

    }

}

/*

*    创建一个“运动员”类,继承“人”类

*    extends : 关键字,继承某个类

*/

class Sport extends Human

{

    public $type;   

    public function __construct($name,$type)

    {

        $this->name = $name;    //给父类 $name 属性赋值

        $this->type = $type;   

    }

    public function run()

    {

        $this->say();   //调用父类“说话”的方法

        echo "我在正跑步,我是一员".$this->type."运动员.....\n";

    }

}

/*

*    创建一个“主持人”类,继承“人”类

*    extends : 关键字,继承某个类

*/

class Host extends Human

{

    public $television;

    public function __construct($name,$television)

    {

        $this->name = $name;   

        $this->television= $television;  

    }

    public function perform()

    {

        $this->eat();   //调用父类“吃饭”的方法

        echo "我在正表演一个节目,我是".$this->television."电视台的一名主持人.....\n";

    }

}

 

//实例化“运动员”类

$nba = new Sport("乔丹","篮球");

$nba->run();

 

//实例化“主持人”类

$tv = new Host("张三","北京卫视");

$tv->perform();

 

//输出结果:

//父类说话的方法,姓名:乔丹 我在正跑步,我是一员篮球运动员.....

//父类吃饭的方法 我在正表演一个节目,我是北京卫视电视台的一名主持人.....

?>

ログイン後にコピー

2.3. アクセス制御: public、protected、private キーワード

:定義 パブリックなメンバー属性またはメソッドをどこでも使用できます

protected: 保護されたメンバー属性またはメソッドを定義します。クラス自体またはサブクラスによってのみ使用が許可されます

private: プライベートなメンバー属性またはメソッドを定義します。クラス自体によってのみ使用が許可されます

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

class Human

{

    public function say()

    {

        echo "父类说话的方法";

    }

}

class Sport extends Human

{

    //重写父类“说话”的方法

    public function say()

    {

        echo "子类说话的方法";

    }

}

$nba = new Sport();

$nba->say();

//输出结果:子类说话的方法

?>

ログイン後にコピー

2.4、static (static) キーワード
1)、静的属性はクラスのパブリック データを保存するために使用されます。

2)、静的メソッドでは静的属性またはメソッドのみにアクセスでき、$this 疑似変数にはアクセスできません使用可能です。

3)、新しいキーワードを使用してオブジェクトをインスタンス化せずに、静的メンバーにアクセスして使用できます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

class Human

{

    public $name;

    protected $sex;

    private $age;

     

}

//实例化对象,给公共属性赋值可正常输出结果,外部不能给protected、private受保护的成员属性赋值或使用

$worker = new Human();

$worker->name = "张三";

echo $worker->name;

 

?>

ログイン後にコピー

2.5. 最後のキーワード: メンバー メソッドはオーバーライドまたは継承できません
例: 1. 親クラスの場合「Eat」メソッドは、サブクラスにオーバーライドされたくない。 2. クラス「Athletes」の場合、サブクラスを作成したくない。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

class Human

{

    static $name = "张三";

    static function say()

    {

        echo "我的姓名叫:".self::$name;

    }

}

//外部使用静态成员属性或方法

echo Human::$name;

Human::say();

 

//输出结果:张三  我的姓名叫:张三

?>

ログイン後にコピー

2.6. データ アクセス: $this、self、parent キーワード
。 $this: 疑似変数。クラス自体を表し、このクラスとその親クラスのメンバー プロパティとメソッドにアクセスできます。

self: クラス内の静的なメンバー属性またはメソッドにアクセスします。

parent: 親クラスのメンバー属性またはメソッドにアクセスします。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<?php

class Human

{

    final public function eat()

    {

        echo "父类吃饭的方法,不允许子类重写";

    }

}

final class Sport extends Human

{

    public function eat()

    {

        echo "子类吃饭的方法。此时程序将会报致命错误";

    }

}

//创建一个类继承 Sport 这个类。此时程序也将会报致命错误。因为 Sport 类不允许再创建子类

class Student extends Sport

{

    public $name;

}

 

//实例化 Sport 类 ,调用 eat() 方法

$nba = new Sport();

$nba->eat();

 

//实例化 Student 类 ,给 name 属性负值

$obj = new Student();

$obj->name = "张三";

 

//输出结果:Fatal error: Cannot override final method Human::eat() in ******.php on line 15

//Fatal error: Class Student may not inherit from final class (Sport) in ****.php on line 20

?>

ログイン後にコピー

2.7. インターフェイス: 異なるクラスの共通の動作メソッドを定義しますが、それらを具体的に実装するわけではなく、サブクラスによって実装される 特定のメソッド;
例: 人間は食べることができ、動物も食べることができ、一部の植物も食べることができますが、食べる方法は異なるため、現時点ではインターフェイスクラスと特定のメソッドを定義する必要がありますはサブクラスによって実装されます。

インターフェイス キーワードを定義します:interface

インターフェイス メソッド キーワードを実装します:implements

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

class Human

{

    static $name = "张三";

}

class Sport extends Human

{

    static function getParentName()

    {

        echo parent::$name;

    }

    public function get()

    {

       self::getParentName();

    }

}

$obj = new Sport();

$obj->get();

//输出结果:张三

?>

ログイン後にコピー

2.8. ポリモーフィズム: たとえば、インターフェイス A には 2 つの実装 B と C があります。B と C は、インターフェイス この現象はポリモーフィズムと呼ばれます。上の例では、ICanEat インターフェイスは Eat() メソッドを定義しています。これらはすべて「食べる」メソッドを実装していますが、食べるときの動作は異なります。これはポリモーフィズムと呼ばれます。 2.9. 抽象クラス: インターフェイスとクラスの定義の間に介入し、クラス内の一部のメソッドを実装できないようにします。 . 同じ機能を持ち、変更されないメソッドの一部を実装します。ただし、インターフェイス クラスでは実装されたメソッドは許可されません。
例: 人間も動物も食事と呼吸のメソッドを持っていますが、食事以外の呼吸メソッドは同じです。この場合、それを実装するには抽象クラスを定義する必要があります。

抽象クラスのキーワードを定義する: abstract

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<?php

//定义一个接口类,有吃饭的方法,但不具体实现。

interface ICanEat

{

    public function eat($food);

}

class Human implements ICanEat

{

    //eat()方法必须由子类来实现,否则程序将报致命错误

    public function eat($food)

    {

        echo "I&#39;m eating ".$food;

    }

}

class Animal implements ICanEat

{

    public function eat($food)

    {

        echo "It&#39;s eating ".$food;

    }

}

//实例化一个“人”类

$people = new Human();

$people->eat(&#39;rice&#39;);

 

//实例化一个“动物”类

$monkey = new Animal();

$monkey->eat(&#39;banana&#39;);

 

//输出结果:I&#39;m eating rice

// It&#39;s eating banana

 

?>

ログイン後にコピー

3. PHP オブジェクト指向プログラミングの特別な実践


PHP 言語に固有のいくつかのマジック メソッド:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<?php

//定义一个抽象类,里面有吃饭和呼吸的方法。呼吸方法需要在抽象类中具体实现

abstract class ICanEat

{

    abstract function eat($food);

    public function breath()

    {

        echo &#39;Breath use the air...&#39;;

    }

}

class Human extends ICanEat

{

    public function eat($food)

    {

        echo "I&#39;m eating ".$food;

        $this->breath();

    }

}

//实例化“人”类

$people = new Human();

$people->eat(&#39;rice&#39;);

//输出结果:I&#39;m eating rice Breath use the air...

?>

ログイン後にコピー
関連する推奨事項:

PHP オブジェクト指向のメモ - 123 図解静的属性と静的メソッド

オブジェクト指向PHPの3大特徴を学びましょう

PHPオブジェクト指向ゲストブック関数の詳細な実装例

以上がPHP のオブジェクト指向プログラミングについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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