この記事で共有する内容は、PHP オブジェクト指向プログラミングについての簡単な説明です。必要な方は参考にしてください。
1. 2. PHP 高度なオブジェクト指向プログラミングの実践
知識ポイント: クラスの継承、メソッドのオーバーライド、アクセス制御、静的キーワード、final キーワード、データ アクセス、インターフェイス、ポリモーフィズム、抽象クラス
2.1、クラスの継承: キーの拡張言葉例えば、オペレーター、ホスト、人間と同じ行動方法を持っていますが、それぞれが異なる専門性を持っています。したがって、プログラミング時にそれらの親クラスを作成し、継承する必要があります。
<?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 '大家好,我的名字叫'.$this->name.',今年'.$this->age.'岁,我的性别是'.$this->sex; } public function __destruct() { $this->name = null; $this->sex = null; $this->age = null; } } //实例化“人”类 $male = new Human("张三","男","20"); //调用“人”类说话的方法 $male->say(); //输出结果:大家好,我的名字叫张三,今年20岁,我的性别是男 ?>
2.2. メソッドの書き換え: サブクラスは親クラスのメソッドを書き換えます
<?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(); //输出结果: //父类说话的方法,姓名:乔丹 我在正跑步,我是一员篮球运动员..... //父类吃饭的方法 我在正表演一个节目,我是北京卫视电视台的一名主持人..... ?>
:定義 パブリックなメンバー属性またはメソッドをどこでも使用できます
protected: 保護されたメンバー属性またはメソッドを定義します。クラス自体またはサブクラスによってのみ使用が許可されますprivate: プライベートなメンバー属性またはメソッドを定義します。クラス自体によってのみ使用が許可されます
<?php class Human { public function say() { echo "父类说话的方法"; } } class Sport extends Human { //重写父类“说话”的方法 public function say() { echo "子类说话的方法"; } } $nba = new Sport(); $nba->say(); //输出结果:子类说话的方法 ?>
3)、新しいキーワードを使用してオブジェクトをインスタンス化せずに、静的メンバーにアクセスして使用できます。
<?php class Human { public $name; protected $sex; private $age; } //实例化对象,给公共属性赋值可正常输出结果,外部不能给protected、private受保护的成员属性赋值或使用 $worker = new Human(); $worker->name = "张三"; echo $worker->name; ?>
<?php class Human { static $name = "张三"; static function say() { echo "我的姓名叫:".self::$name; } } //外部使用静态成员属性或方法 echo Human::$name; Human::say(); //输出结果:张三 我的姓名叫:张三 ?>
2.6. データ アクセス: $this、self、parent キーワード
。 $this: 疑似変数。クラス自体を表し、このクラスとその親クラスのメンバー プロパティとメソッドにアクセスできます。
parent: 親クラスのメンバー属性またはメソッドにアクセスします。
<?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 ?>
インターフェイス メソッド キーワードを実装します:implements
<?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(); //输出结果:张三 ?>
<?php //定义一个接口类,有吃饭的方法,但不具体实现。 interface ICanEat { public function eat($food); } class Human implements ICanEat { //eat()方法必须由子类来实现,否则程序将报致命错误 public function eat($food) { echo "I'm eating ".$food; } } class Animal implements ICanEat { public function eat($food) { echo "It's eating ".$food; } } //实例化一个“人”类 $people = new Human(); $people->eat('rice'); //实例化一个“动物”类 $monkey = new Animal(); $monkey->eat('banana'); //输出结果:I'm eating rice // It's eating banana ?>
PHP 言語に固有のいくつかのマジック メソッド:
<?php //定义一个抽象类,里面有吃饭和呼吸的方法。呼吸方法需要在抽象类中具体实现 abstract class ICanEat { abstract function eat($food); public function breath() { echo 'Breath use the air...'; } } class Human extends ICanEat { public function eat($food) { echo "I'm eating ".$food; $this->breath(); } } //实例化“人”类 $people = new Human(); $people->eat('rice'); //输出结果:I'm eating rice Breath use the air... ?>
PHP オブジェクト指向のメモ - 123 図解静的属性と静的メソッド
以上がPHP のオブジェクト指向プログラミングについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。