4

私はPHP5.3/ PHP5.4OOP機能で自分自身を教育しようとしています。

私はこのようなものをコーディングしようとしました。ただし、機能しません。

index.php

namespace Website;

use Website\Database as Database;

class Website extends Database
{
    function __construct()
    {
        echo "Test";
    }
}

$website = new Website();

./Website/Database.php

namespace Website\Database;

class Database
{
    function construct()
    {
        echo "Hello from Database";
    }
}

クラスの作成方法や相互の関連付け方法などは知っていますが、名前空間を一番上に追加すると、すべてが壊れてしまいます。

それで、私はいくつかの基本的なことを聞​​きたいと思います。

Q1use ClassName;クラスを自動ロード/インクルードするという意味ですか?

Q2\ :左側に何もないとはどういう意味ですか。(例:new \ Database();)

Q3\PHPのディレクトリを意味しますか、それとも開発者がそれを扱う方法だけですか?

Q4:スクリプトを機能させるには、スクリプトにどのような変更を加える必要がありますか?

4

2 に答える 2

3

最初の3つの質問に答えて:

Namespacing!== Autoloading、namespacingはクラス構造を単純化する方法であり、異なる名前空間のクラスの「オーバーロード」を可能にします。自動読み込みとは、必要なときにファイルを自動的に読み込むことです。同じものではありません。名前空間を使用している場合は、おそらくオートローダーも使用することをお勧めします。

「リーディング」\は名前空間のグローバルスコープです。その後\、名前空間の区切り文字として機能します

\名前空間の区切り文字です。ディレクトリセパレータは、プラットフォームに応じて、/またはfilespecsにあります。\しかし、/とにかくすべてのプラットフォームで動作するので、実際にはすべてのクロスプラットフォーム開発に使用する必要があります。DIRECTORY_SEPARATOR定数もあります

于 2013-03-16T16:38:27.960 に答える
2

A1:まだロードされていないクラスの場合use、オートローダーが起動します。ただし、(名前空間の)クラスがロードされるようにするには、独自のオートローダーを作成する必要があります。

テストされていない例:

function autoloader($className){
    $fileName = str_replace('\\', DIRCTORY_SEPARATOR, $className);
    include __DIR__ . $fileName;
}
spl_autoload_register(autoloader);

これは、ローダーがアプリケーションルートにあることを前提としています。また、エラーチェックは行われず、別のディレクトリセパレータをどこかに追加する必要がある場合があります。

A2:先頭\はグローバル名前空間を意味し、クラス名が現在の名前空間にないことを示します。

A3:名前空間はディレクトリ構造と一致する必要はありませんが、ほとんどの開発者はそれを好みます。また、自動読み込みが簡単になります。

于 2013-03-16T16:45:44.037 に答える