PHP の外部クラスから MyISQL を利用する
PHP 5.6 から 7.0 への移行とそれに対応する MySql から Mysqli へのデータベース調整により、次のことが明らかになりました。課題。ここでは、根本的な問題を掘り下げ、代替ソリューションを提供します。
構造を理解する
まず、プライベート プロパティとコンストラクターを備えたデータベース クラスを考案しました。接続を確立します。ただし、この設定では、他のクラスからアクセスすると切断が発生します。
次に、データベースと対話するように設計された API クラスがありますが、コンストラクター内でデータベース接続に別の新しいインスタンス化を利用します。
エラーの原因: InternalInconsistency
API クラスから $this->db->conn を参照すると、null が取得され、内部サーバー エラーが発生します。これは、$this->db がオブジェクトの作成時にのみ初期化され、接続データが保持されないために発生します。
提案された解決策: 依存関係の注入
代わりにクラスごとに個別にインスタンス化する場合は、依存関係の注入を考慮してください。方法は次のとおりです。
これらの原則を採用すると、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 サイトの他の関連記事を参照してください。