1

クラスを保持するDatabase.phpファイルを含むDatabaseフォルダーを含むルートディレクトリにSystemフォルダーがある場合

class Database{
   static function Connect(){
      echo "connect";
   }
}

index.phpそして、ルートディレクトリにあるからそれを呼び出します。

Database::Connect(); 名前空間で本当に苦労しているクラスにアクセスするために名前空間を作成するにはどうすればよいですか。

Database.phpファイルなどの先頭に配置する必要がありnamespace System\Databaseますか?php.netページにない良い例はありますか?

4

2 に答える 2

4

名前空間(PHPの場合)は、実際にはプロジェクト内のクラス間の名前の衝突を防ぐための単なる方法です。それらは、「Zend_Controller_Action_Helper」のような名前のクラスの形で(公式にサポートされる前に)しばらくの間使用されてきました。PHP5.3で「実際の」名前空間が導入されたことは、実際には、名前空間を「使用」することで、コードで短くて読みやすい名前を使用できることを意味します。

例えば。

ファイル:system / database.php

namespace MyProject;

class Database {
// ...
}

ファイルpublic/index.php

require_once '../system/database.php';

// here we have to use the fully qualified name of the Database class,
// this is similar to the old unofficial underscore method.
$db = \MyProject\Database::connect();

ファイル:public / index2.php

require_once '../system/database.php';
use MyProject\Database;

// here we can simply use "Database" because the "use" statement says:
// for this file we are using the "Database" class from the "MyProject" namespace
$db = Database::connect();

名前空間は、慣例により(および自動ロードの場合)ディレクトリにのみ関連付けられます。名前空間自体は、クラスの包含方法と使用方法を変更しません。

于 2012-12-11T16:14:04.983 に答える
1

Databaseクラスの名前空間をSystem\Databaseに変更する場合は、クラス宣言の上に次の名前空間を追加する必要があります。

namespace System\Database;

次に、Connectメソッドを呼び出す場合:

\System\Database\Database::Connect();

ファイル構造は、スクリプトに含めるファイルの自動ロードに関してのみ名前空間に関連するため、スクリプトにDatabase.phpを手動で含める場合は、名前空間を任意に作成できます。

于 2012-12-11T16:12:20.310 に答える