独自MVCフレームワークにおける全てのモデルの親の実装

全てのモデルの親クラスを実装してみましょう:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private $link;
    
    public function __construct()
    {
      $this->link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
      mysqli_query($this->link, "SET NAMES 'utf8'");
    }
    
    protected function findOne($query)
    {
      // ここに何らかのコードが入ります
    }
    
    protected function findMany($query)
    {
      // ここに何らかのコードが入ります
    }
  }
?>

ご覧の通り、クラスのコンストラクタでデータベースへの接続を行っています。 しかし、問題があります:作成される各モデル(1つのコントローラーアクション内に複数のモデルがある場合)がそれぞれ独自のデータベース接続を行い、これは最適ではありません。

最初に作成されたモデルのためにのみデータベース接続が作成され、残りのモデルが既に作成された接続を使用するようにしてみましょう。そのために、プロパティlinkを静的(static)にします:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // プロパティが設定されていない場合は接続します
        self::$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        mysqli_query(self::$link, "SET NAMES 'utf8'");
      }
    }
    
    protected function findOne($query)
    {
      
    }
    
    protected function findMany($query)
    {
      
    }
  }
?>
Задание 1

記載されたクラスModelのコードをコピーし、ファイル/core/Model.phpに配置してください。

Задание 2

このクラスにメソッドfindOneを実装してください。 その動作を確認してください。

Задание 3

このクラスにメソッドfindManyを実装してください。 その動作を確認してください。