7

PHPのインクルードパスとファイルやクラスのインクルードについていくつか質問があります。

以下は、複数のインクルードパスを設定しているコードの簡単なスニペットです。これは別のプロジェクトで見ましたが、理由がわかりません。

過去5年ほどの間、どのプロジェクトでもset_include_path()を使用する必要はありませんでした。

Q1)
では、インクルードパスを設定する目的は正確には何ですか?私はいつもinclude()呼び出しにパスを含めてきました。

Q2)
以下の例では、複数のパスを設定しています。複数の場所にファイルを含める場合、これはどのように機能しますか、目的または正確に何をするのか混乱していますか?

<?php
// Define App path
define('APPLICATION_PATH', realpath('../'));

// Build array of 3 different paths
$paths = array(
    APPLICATION_PATH,
    APPLICATION_PATH . '\com',
    get_include_path()
);


/*
Result of array above...
Array
(
    [0] => E:\Web Server\xampp\htdocs\test
    [1] => E:\Web Server\xampp\htdocs\test\com
    [2] => .;C:\php5\pear
)
*/

// Set include path from array above
// http://us3.php.net/manual/en/function.set-include-path.php
set_include_path(implode(PATH_SEPARATOR, $paths));

?>

Q3)
これは少し異なる質問ですが、それでもインクルードに関連しています。以下は、クラスの単純な自動ロード関数です。以前はclassesフォルダーがあり、すべてのクラスファイルを自動ロードしていました。現在のプロジェクトでは、以下のように自動ロードするクラスのライブラリがありますが、モジュールディレクトリからクラスファイルを自動ロードする必要がある別のセクションもあります。

したがって、このような場所にある ライブラリクラスを自動ロードする必要があります。

root / contains / library / classes / library_class_files.php

+++ plus +++

このような場所にあるさまざまなモジュール(アカウント、メッセージ、友達、写真、ブログ、フォーラムなど)のクラスをロードします。

root / modules / forums / modules_class_files.php

2つの異なる場所からクラスファイルをロードする必要はないかもしれませんが、ロードする場合、どうすればそれを実行できますか?

<?php
//auto include class files that we need on a per page basis
function __autoload($class_name){
    include('library/classes/' .$class_name . '.class.php');
}
?>
4

1 に答える 1

5

Q1: http: //php.net/manual/en/ini.core.php#ini.include-path

Q2:マニュアルに記載されているように、PHPはすべてのパスを繰り返し、ファイルを見つけようとします。

Q3:最新のSPLオートローダー機能を使用して、必要な数のオートローダーを定義できます。

于 2011-01-26T23:27:06.280 に答える