この記事で共有する内容は、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
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();
?>
|
ログイン後にコピー
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" ;
}
}
class Sport extends Human
{
public $type ;
public function __construct( $name , $type )
{
$this ->name = $name ;
$this ->type = $type ;
}
public function run()
{
$this ->say();
echo "我在正跑步,我是一员" . $this ->type. "运动员.....\n" ;
}
}
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 ;
}
$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 "子类吃饭的方法。此时程序将会报致命错误" ;
}
}
class Student extends Sport
{
public $name ;
}
$nba = new Sport();
$nba ->eat();
$obj = new Student();
$obj ->name = "张三" ;
?>
|
ログイン後にコピー
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
{
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');
?>
|
ログイン後にコピー
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 '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');
?>
|
ログイン後にコピー
関連する推奨事項:
PHP オブジェクト指向のメモ - 123 図解静的属性と静的メソッド
オブジェクト指向PHPの3大特徴を学びましょう
PHPオブジェクト指向ゲストブック関数の詳細な実装例
以上がPHP のオブジェクト指向プログラミングについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。