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

OOPとは何ですか?

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

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

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

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

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

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

おっとっと Concepts PHPで

PHP はオブジェクト指向のスクリプト言語です。 上記の原則をすべてサポートしています。 上記の原則は以下によって実現されます。

  • カプセル化 – 「get」メソッドや「set」メソッドなどを使用します。
  • 継承 – extends キーワードの使用経由
  • ポリモーフィズム –implements キーワードの使用経由

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

UMLとは?

統一モデリング言語 UML は、オブジェクト指向システムの設計と文書化に使用される技術です。

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

クラス図の例

おっとっと Concepts PHPで

クラス図のキー

  • 当学校区の 上部ボックス クラス名が含まれています
  • 当学校区の 中央のボックス クラス変数が含まれています
  • 当学校区の 下のボックス クラスメソッドが含まれています
  • 当学校区の マイナス(-) 記号の意味 プライベートスコープ
  • 当学校区の プラス(+) 記号は公開範囲を意味します
  • 当学校区の ハッシュ(#) 記号は保護範囲を意味します

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

class キーワードは、PHP でクラスを定義するために使用されます。 以下は、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」は、変数がクラスの外部から直接アクセスできないことを意味します (カプセル化)。
  • 「public function __construct($family…)」はphpのコンストラクターメソッドです。 この関数は、クラスのインスタンスが作成されるたびに呼び出されます。 今回は家族と食べ物を設定します。
  • 「public function get…()」は、ファミリーまたは食品の値にアクセスするために使用されるメソッドです(カプセル化)
  • 「public function set…()」は、ファミリーまたは食品の値を設定するために使用されるメソッドです(カプセル化)

PHP で継承を実装する方法

私たちは牛とライオンと一緒に働きます。 ウシとライオンはどちらも Animal クラスを継承しています。

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

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;
    }
}
?>

Lion クラスをコーディングしてみましょう

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

ここに、

  • 「class ... extends Animal」は、牛とライオンに 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 ブラウザでアプリケーションを表示してみましょう

PHPでの継承

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

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

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

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

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

PHPでの継承

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

<?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;
    }
}
?>

ここに、

  • 「抽象クラス」とは、クラスが php オブジェクトの作成に直接使用できないことを意味します
  • 「$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);
}
?>

ここに、

  • 「インターフェース」はインターフェースを作るためのキーワードです
  • 「public function…(…)」は実装すべき標準メソッドです

次に、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 … extends DBCommonMethods」 DBCommonMethods のメソッドを使用します。
  • 「… DBInterface を実装する」により、使用されるデータベース ドライバーに関係なく、クラスが標準メソッドを提供するようになります。

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

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

Or

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

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

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

製品概要

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