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');
}
?>