PHPオブジェクト指向プログラミング(OOP)の概念チュートリアルと例

OOPとは何ですか?

オブジェクト指向は、従業員、車、銀行口座などの実世界のオブジェクトを中心にアプリケーションをモデル化するソフトウェア開発へのアプローチです。クラスは、実世界のオブジェクトのプロパティとメソッドを定義します。 オブジェクトはクラスのオカレンスです。

オブジェクト指向の3つの基本的なコンポーネントは次のとおりです。

  • オブジェクト指向分析–システムの機能
  • オブジェクト指向設計–システムのアーキテクチャ
  • オブジェクト指向プログラミング–アプリケーションの実装

オブジェクト指向プログラミングの原則

OOPの3つの主要な原則は次のとおりです。

  • カプセル化 –これは、実装の詳細を非表示にし、メソッドのみを公開することに関係しています。 カプセル化の主な目的は次のとおりです。
    • ソフトウェア開発の複雑さを軽減–実装の詳細を非表示にし、操作のみを公開することで、クラスの使用が簡単になります。
    • オブジェクトの内部状態を保護します。クラス変数へのアクセスは、getやsetなどのメソッドを介して行われます。これにより、クラスが柔軟になり、保守が容易になります。
    • クラスの内部実装は、クラスを使用するコードを壊すことを心配せずに変更できます。
  • 継承 –これはクラス間の関係に関係しています。 関係は親と子の形をとります。 子は、親クラスで定義されたメソッドを使用します。 継承の主な目的は次のとおりです。
    • 再利用性–多くの子が同じ親から継承できます。 これは、データベースからのデータの追加、更新、削除などの一般的な機能を提供する必要がある場合に非常に役立ちます。
  • ポリモーフィズム –これは、単一のフォームを持つことに関係していますが、多くの異なる実装方法があります。 ポリモーフィズムの主な目的は次のとおりです。
    • アプリケーションの保守を簡素化し、アプリケーションをより拡張可能にします。

PHPでのOOPの概念

PHPはオブジェクト指向のスクリプト言語です。 上記のすべての原則をサポートします。 上記の原則は、以下を介して達成されます。

  • カプセル化 -「get」および「set」メソッドなどの使用を介して。
  • 継承 -extendsキーワードを使用して
  • ポリモーフィズム -implementsキーワードを使用して

OOPの基本的な知識と、それがPHPでどのようにサポートされているかを理解したところで、上記の原則を実装する例を見てみましょう。

UMLとは何ですか?

統一モデリング言語UMLは、オブジェクト指向システムを設計および文書化するために使用される手法です。

UMLは多くのドキュメントを作成しますが、オブジェクト指向のphpプログラミングにとって非常に重要なクラス図を見ていきます。

クラス図の例

クラス図キー

  • ザ・ アッパーボックス クラス名が含まれています
  • ザ・ ミドルボックス クラス変数が含まれています
  • ザ・ 下のボックス クラスメソッドが含まれています
  • ザ・ マイナス(-) サインは意味します プライベートスコープ
  • ザ・ プラス(+) 記号はパブリックスコープを意味します
  • ザ・ ハッシュ(#) 記号は保護されたスコープを意味します

PHPでクラスを作成する方法

classキーワードは、PHPでクラスを定義するために使用されます。 以下は、PHPでクラスを作成するためのルールです。

  • クラス名は文字で始まる必要があります
  • クラス名をPHPの予約語にすることはできません
  • クラス名にスペースを含めることはできません

動物を表現するためのクラスを作成するとします。

まず、すべての動物に共通する特徴を特定することから始めます。

  • すべての動物は、草食動物、カーニバルなどの家族に属しています。
  • すべての動物は食べ物を食べる

下の図は動物の図を示しています

動物のクラスをコーディングしましょう

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food   = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?> 

ここに、

  • 「private $ family、$ food」は、変数にクラスの外部から直接アクセスできないことを意味します(カプセル化)。
  • 「publicfunction__construct($ family…)」は、phpコンストラクターメソッドです。 この関数は、クラスのインスタンスが作成されるたびに呼び出されます。 この場合、私たちは家族と食べ物を設定しています。
  • 「publicfunctionget…()」は、家族または食品の価値にアクセスするために使用されるメソッドです(カプセル化)
  • 「publicfunctionset…()」は、家族または食品の価値を設定するために使用される方法です(カプセル化)

PHPで継承を実装する方法

牛とライオンを扱います。 牛とライオンはどちらも動物クラスから継承しています。

以下のクラス図は、関係を示しています。

牛は動物クラスを継承し、独自の変数とメソッドも定義していることに注意してください。

ここで、Cowクラスをコーディングしましょう


<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

ライオンクラスをコーディングしましょう


<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

ここに、

  • 「class…extendsAnimal」は、牛とライオンにAnimalクラス(継承)のメソッドを使用させます。

クラスのオブジェクトを作成する方法

簡単にするために、Animal、Cow、およびLionクラスはすべて同じディレクトリに配置する必要があります。

それでは、クラスを使用するアプリケーションを作成しましょう。

PHPクラスの例


<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow  = new Cow('Herbivore', 'Grass');
$lion = new Lion('Canirval', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

アプリケーションのテスト

Webブラウザでアプリケーションを表示してみましょう

素晴らしいですね! ここで、OOPの3番目の原則であるポリモーフィズムを見てみましょう。

MySQLやなどのさまざまなデータベースエンジンに接続するアプリケーションを開発したいとします。 SQL サーバーですが、同じ統一されたインターフェースを使用します。

標準メソッドを定義するインターフェースと、共通メソッドを実装する抽象クラスを作成できます。

  • インターフェース –それはクラスに似ています。 メソッドとパラメーターのみを定義します。
  • 抽象クラス –オブジェクトを直接作成するために使用できないクラスです。 その目的は、一般的なメソッドの部分的または全体的な実装を提供することです。

以下のクラス図は、抽象クラス、インターフェイス、および実装クラス間の関係を示しています。

抽象クラスを作成しましょう


<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host     = $host;
        $this->db       = $db;
        $this->uid      = $uid;
        $this->password = $password;
    }
}
?>

ここに、

  • 「抽象クラス」とは、クラスをphpcreateオブジェクトに直接使用できないことを意味します
  • 「$ host、$ db…」はすべての実装に共通のクラス変数です
  • 「function__construct(…)」は、初期化時に共通変数値を設定するphpクラスコンストラクターメソッドです。

次に、データベースエンジンに応じて異なる方法で実装される標準メソッドを含むインターフェイスを作成しましょう。


<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

ここに、

  • 「インターフェース」はインターフェースを作成するためのキーワードです
  • 「publicfunction…(…)」は、実装する必要のある標準的なメソッドです。

次に、DBCommonMethodsクラスを拡張し、DBInterfaceインターフェイスを拡張する具象クラスを作成しましょう。 MySQLDriver.php


<?php class MySQLDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) 
{ 
parent::__construct($host, $db, $uid, $password); } 
public function db_connect() { //connect code goes here } 
public function delete($where) { //delete code goes here } 
public function insert($data) { //insert code goes here } 
public function read($where) { //read code goes here } 
public function update($where) { //update code goes here } 
} ?>

MSSQLServerDriver.php


<?php 
class MSSQLServerDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password)
 { 
 parent::__construct($host, $db, $uid, $password); } 
 public function db_connect() { //connect code goes here } 
 public function delete($where) { //delete code goes here }
 public function insert($data) { //insert code goes here }
 public function read($where) { //read code goes here }
 public function update($where) { //update code goes here }
 } ?>

ここに、

  • 「class…extendsDBCommonMethods」は、DBCommonMethodsのメソッドを使用します
  • 「…implementsDBInterface」は、使用されるデータベースドライバーに関係なく、クラスが標準メソッドを提供することを保証します。

上記のコードの使用法上記のクラスを使用するコードは次のようになります。


<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>

または


<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>

残りのコードは、次のような両方のドライバーで同じになります。


<?php
$db->db_connect();
$db->insert($data);
?>

概要

  • オブジェクト指向プログラミングOOPは、実世界のオブジェクトに基づいてアプリケーションをモデル化する強力な技術です。
  • クラスは、プロパティとメソッドを持つ実世界のオブジェクトの表現です
  • OOPの3つの基本原則は次のとおりです。
    • カプセル化
    • 継承
    • ポリモーフィズム

Hope this helps!

Source link