探る1:名前空間かどうかの違い:
仮定:次のようにApplication.phpクラスアプリケーションで定義され、名前空間宣言、です。
<?php
namespace app;
class Application
{
protected function getClass()
{
return __CLASS__.PHP_EOL;
}
}
そして、テストファイルでそれを使用します。
<?php
require '../app/Application.php';
new Application();
するとエラーに、エラーはおそらくテストはクラスファイルが見つからなかったことを意味し
ええと?!!!なぜ、私が明らかに〜ああApplication.phpを引用しました
探偵分析時間:
最初は公式文書が説明しています:
名前空間の役割を認識するすべての必要性の最初には、それはファイルの属性に論理的にロケーションパス(中PHP)を追加することですが、物理パスに限定されないが、デモはエラーが、Application.phpので、それが宣言する理由名前空間、そして、あなたはもはや単純な新しいアプリケーションは、もちろん、前提は、ファイルへのアクセスを導入する必要がある間に、与えられたクラスのアプリケーションにアクセスするための論理パスにそれを使用するために従わないする必要があります、違いはあなたがここに(クラスを使用する必要があり、特定のカテゴリ、方法をさらに含む、定数、等であってもよい)、それを使用する論理的なパスです。
それでは、どのようなバグ修正、それ?3つの方法があります。
A:
デモ文書に、名前空間宣言および名前空間クラスのアプリケーションは、同じ宣言する必要次のように、同じ論理パスで、クラスのアプリケーションに対して論理パスによりアクセスすることができます。
<?php
namespace app;
require '../app/Application.php';
new Application();
2:
ファイルの論理パスの使用を宣言するために、使用を使用します。
<?php
use app\Application;
require '../app/Application.php';
new Application();
3:
クラスを呼び出すための論理パス
<?php
require '../app/Application.php';
new app\Application();
だから私は何それから、ファイルへの完全な論理パスを使用していますが、唯一の道王のディレクトリセクションの論理パスと同等のものを使用していない場合は、のために?
すなわち:
<?php
use app\*;
PHPは、サポートしていないようでした
ここでの使用についての説明は次のとおりです。
クラスのアプリケーションのために我々は、デモで完全な論理パスおよび方法を呼びますか?
以下の3つのケースがあります。
<?php
require '../app/Application.php';
new app\Application();
使用OK、アプリケーションの完全な論理パスは\アプリ\アプリケーション、なぜ必要がありますか?ルック。
<?php
require '../app/Application.php';
new \app\Application();
这两种都没有报错,因为Application完整的逻辑路径确实为\app\Application,那么为什么第一种情况也可以呢,因为demo中并没有声明命名空间,默认为'\',第一种情况可以解释为在demo所在的命名空间下利用相对逻辑路径调用Application,所以Application完整的逻辑路径确实为\app\Application,
因此这种情况就会报错:
<?php
namespace web;
require '../app/Application.php';
new app\Application();
因为此时Application的完整逻辑路径成为了 \web\app\Application
官方解释如下:
故:在使用命名空间的时候,需要注意引用脚本的命名空间和被引用脚本的命名空间,从而使用先对逻辑路径或者绝对路径