0

データベースを管理するためのクラスがあります。このクラスでは、接続を定義し、さまざまな種類のフェッチ/データの取得のためのさまざまな関数を用意しています。

私は通常、ajax操作用のphpファイルを持っており、それを通じて必要な関数を含むファイルを含め、これらの関数にクラスのインスタンスを変数として渡します。

次に、そのインスタンスを関数で使用してクエリを作成し、データベースからデータをフェッチします。

私の質問は、関数を含むファイルにクラス宣言を含める必要がありますか? 構造は次のとおりです...多かれ少なかれ。基本的に、databaseClass.php を functionCollection.php に含める必要がありますか?

databaseClass.php
<?php

class MyDBManager
{
    private $database   = 'db';
    private $host       = 'host'; 
    private $username   = 'siteguest';
    private $password   = 'psw';
    private $options    = array();
    ...
    function __construct(){}

    function runQuery($statement){}

    function fetchRow(){}
    ...
}
?>

livesearch.php
<?php
    include_once("databaseClass.php");
    include_once("something.php");

    $var1 = $_POST['id'];
    $var2 = $_POST['date'];
    $var3 = $_POST['time'];

    $database = new MyDBManager();

    somefunction($database, $var1, $var2, $var3);
    ...
?>

functionCollection.php
<?php
    include_once("databaseClass.php");
    include_once("misc.php");

    function nameExists($database, $var1, $var2, $var2){}
    ...
?>
4

2 に答える 2

0

PHP オートローディングは、まさにこの問題を防ぐように設計されています。クラスをインスタンス化しようとすると、PHP は例外をスローする前にそのクラスを自動ロードしようとします。

オートロードする前に、すべてのクラス ファイルを含める必要があります。PHPドキュメントから:

PHP 5 では、これは不要になりました。まだ定義されていないクラス/インターフェースを使用しようとする場合に自動的に呼び出される __autoload() 関数を定義できます。この関数を呼び出すことで、PHP がエラーで失敗する前に、スクリプト エンジンにクラスをロードする最後のチャンスが与えられます。

spl_autoload_registerただし、クラスが見つからなくなるまで 1 つずつ実行され、例外がスローされる複数のオートローダーを登録できる、より良いオプションがあります。

現在、PHP には標準と呼ばれるものPSR-0 Standardがあり、名前空間の PHP のサポートとともに提供されています。

この記事を読む必要があります。簡単な歴史を示し、独自のオートローダーを実装する方法を説明しています。http://phpmaster.com/autoloading-and-the-psr-0-standard/

時間があれば、Yii や Symfony のフレームワーク オートローダーなど、実際のオートローダーを調べて詳細を学んでください。

于 2013-06-10T10:52:05.147 に答える