2

関数内にライブラリ ファイルを include() することは悪い習慣と見なされるのでしょうか?

私のウェブサイトの一部は Sphinx 検索エンジンを使用していますが、sphinxapi.php をメインのサイト全体の「config」ファイルに含めてすべてのページに追加するのは効率が悪いようです。

代わりに、次のことを行いました。

 class sphinxSearch
 {
    /*
    * Performs a standard listing search
    */
     function listings($filter, $sdb)
     {
        // include the sphinx api
        require_once SITE_INCLUDE_PATH.SEP.'Sphinx/sphinxapi.php';

        // set default options
        $search = new SphinxClient();
        $search->SetServer(SPX_HOST, SPX_PORT);
        $search->SetConnectTimeout(1);
        $search->SetArrayResult(false);

        // blah blah blah

        return $result;
    }


    /*
    * Listing autocomplete box
    */  
    function autoComplete ($query, $sdb)
    {
        require_once SITE_INCLUDE_PATH.SEP.'Sphinx/sphinxapi.php';

        // set default options
        $search = new SphinxClient();
        $search->SetServer(SPX_HOST, SPX_PORT);
        $search->SetConnectTimeout(1);
        $search->SetArrayResult(false);

        // blah blah blah

    }
}

または、私が見逃しているより良い方法はありますか?

前もって感謝します。

4

3 に答える 3

2

私の意見では、この方法に本質的に問題はありません。

このパフォーマンスを向上させるために実行できることの 1 つは、require_once を実行する代わりに、require にclass_exists実装されているクラスで呼び出しを実行するsphinxapi.phpことです。これは、1 回のページのリロードでこれらの関数を頻繁に呼び出す場合に特に当てはまります。 . 必要なクラスと存在するクラスを理解するを参照してください

例えば:

if (!class_exists('SphinxClass')) require "sphinx/shinxapi.php";

そのときは速い

require_once "sphinx/shinxapi.php";

断然最良のオプションは、オートローダーをセットアップして、ファイルを含めることを心配する必要がないようにすることです。http://phpmaster.com/autoloading-and-the-psr-0-standard/を見てください。プロセスが説明されています。

于 2013-05-23T21:21:45.707 に答える
0

以下を含めることに関するPHP-docsによると:

ファイルが含まれている場合、解析はターゲット ファイルの先頭で PHP モードから HTML モードに移行し、最後に再び再開されます。このため、PHP コードとして実行する必要があるターゲット ファイル内のコードは、有効な PHP の開始タグと終了タグで囲む必要があります。

つまり、これが意図したものであれば問題ありません。ただし、これはあまり良い OOP プログラミングではありません。-classを拡張するためにコードを書き直すことをお勧めしますSphinxClient。それは、よりクリーンなアプローチになるでしょう。

編集:最終的な解決策として、クラスのコンストラクターにファイルを含め、SphinxClient. そのようです:

private $sphinx;
public function __construct() {
    $this->sphinx = new SphinxClient();
}

// Now you can do: $this->sphinx->method
于 2013-05-23T21:28:13.257 に答える
0

ページを含める関数を呼び出すたびに、はい、コントロールがない場合、これは悪い習慣です。例

$path = SITE_INCLUDE_PATH.SEP.'Sphinx/sphinxapi.php';
if(!in_array($path,get_required_files())) require_once $path;
于 2013-05-23T21:07:01.957 に答える