ホームページ >バックエンド開発 >PHPチュートリアル >PHP の外部クラスから MySQLi にアクセスする方法: 依存関係の注入で内部サーバー エラーを克服する

PHP の外部クラスから MySQLi にアクセスする方法: 依存関係の注入で内部サーバー エラーを克服する

DDD
DDDオリジナル
2024-10-28 14:32:02840ブラウズ

How to Access MySQLi from External Classes in PHP: Overcoming Internal Server Errors with Dependency Injection

PHP の外部クラスから MyISQL を利用する

PHP 5.6 から 7.0 への移行とそれに対応する MySql から Mysqli へのデータベース調整により、次のことが明らかになりました。課題。ここでは、根本的な問題を掘り下げ、代替ソリューションを提供します。

構造を理解する

まず、プライベート プロパティとコンストラクターを備えたデータベース クラスを考案しました。接続を確立します。ただし、この設定では、他のクラスからアクセスすると切断が発生します。

次に、データベースと対話するように設計された API クラスがありますが、コンストラクター内でデータベース接続に別の新しいインスタンス化を利用します。

エラーの原因: InternalInconsistency

API クラスから $this->db->conn を参照すると、null が取得され、内部サーバー エラーが発生します。これは、$this->db がオブジェクトの作成時にのみ初期化され、接続データが保持されないために発生します。

提案された解決策: 依存関係の注入

代わりにクラスごとに個別にインスタンス化する場合は、依存関係の注入を考慮してください。方法は次のとおりです。

  1. 必要な接続セットアップ コードを使用してスタンドアロン データベース クラスを作成します。
  2. このデータベース オブジェクトのインスタンスをコンストラクター パラメーターとして、データベース アクセスを必要とするクラスに渡します。

これらの原則を採用すると、PHP アプリケーション内の複数のクラスにわたって MySQLi を効果的に活用できます。

実装例

データベース.php:

<code class="php">$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB");
$db->set_charset('utf8mb4');</code>

myapi.php:

<code class="php">class MyAPI {
    protected $db;
    
    public function __construct($db) {
        $this->db = $db;
    }
    
    // ... Rest of your code
}</code>

app.php:

<code class="php">require 'database.php';
require 'myapi.php';

$api = new MyAPI($db);
// Utilize the API as intended</code>

この再構築により、アプリケーション全体でデータベース リソースへの一貫したアクセスが保証され、発生した内部サーバー エラーが軽減されます。

以上がPHP の外部クラスから MySQLi にアクセスする方法: 依存関係の注入で内部サーバー エラーを克服するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。