-1

私はphp sdkの書き換えプロジェクトに取り組んでおり、クライアントはPSR標準を完成させたいと考えています。こちらの規格ページを見ています

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

私が理解できないことの1つは、クラスで名前空間を使用する場合、includeまたはrequireまたはuseを使用する必要があるかどうかです。私は、自動ロードの理由全体が目的に勝っていることを意味しますか?

たとえば、このようにクラスがあるとします。

namespace Employee\Department;

Class Department 
{
    //code
}

そして、このクラスを拡張して使用する別のクラスがあり、

namespace Employee\community;

Class Community extends Department
{
   //code
}

上記のリンクにある自動ロード機能があることを考えると、上記のコードは psr-0 標準に準拠しています。

4

3 に答える 3

1

あなたの理解のために、オートロードは、オートロードスタックにオートロード関数spl_autoload_registerを登録することによって機能します。new Class()これにより、ステートメントが実行されるたびに関数を呼び出すことができます(詳細)。

一方、オートローディングの FIG 標準である PSR-0 は、PSR-0 オートローダ機能によってネームスペースがファイル名に変換される方法を定義しています。たとえば、名前空間が与えられた場合、オートローダーは次のコードを持つVendor\Fooファイルを探しますVendor/Foo.php

namespace Vendor;
class Foo
{
    public function do()
    {
        echo "Foo";
    }
}

したがって、必須要件に従って、PSR-0 準拠の名前空間は正しい PHP ファイルに解決されrequireますinclude

于 2013-06-13T06:13:51.903 に答える
0

あなたの意図を正しく読めば、両方のコード スニペットで次の名前空間が必要になるだけです。

namespace Employee;

もちろん、PSR-0ベンダー名がないため、これは名前空間ではありません (ベンダー名が「従業員」でない限り)。とにかく、2 つのコード スニペットでこの名前空間を使用すると問題なく動作します。

ただし、それらを別々の名前空間に保持するつもりだった場合、オートローダーは2 番目のスニペットを認識しDepartmentません。名前空間をインポートextends Departmentするか、次のように明示的に指定する必要があります。

namespace Employee\community;

class Community extends Employee\Department\Department
{
  //code
}

スニペットの完全なクラス名がEmployee\Department\Department.

于 2013-06-13T04:29:10.750 に答える