PHPの名前空間(namespace)の覚書です。
// 3の例
$d = new \DateTime('2016-01-01');
useを使ったインポートは必ず完全修飾形式と解釈されるためバックスラッシュを先頭へつける必要はありません。
PHPマニュアルは下記のようにバックスラッシュは記載しないことを推奨しています。
名前空間つきの名前 (完全修飾形式の名前空間は区切り文字を含んだ Foo\Bar のようなもので、グローバルな場合は区切り文字を含まない FooBar のようになります) では先頭のバックスラッシュは不要で、推奨されないことに注意しましょう。 インポートする名前は完全修飾形式でなければならず、 現在の名前空間からの相対指定で処理されることはないからです。
PHP: 名前空間の使用法: エイリアス/インポート – Manual
use句以外でインポート
namespace My
use Foo/Bar; // use句のインポート グローバルな名前空間のFoo/Barをインポート(/Foo/Bazrと同値)
class Some {
__construct() {
$foo_bar = new Bar(); // use句でインポートしたクラスの利用。
$hoge_piyo = new \Hoge\Piyo(); // use句以外で完全修飾名によりインポートするには先頭にバックスラッシュが必要。
$my_foo_bar = new Hoge\Piyo() // use句以外で先頭にバックスラッシュを付けないときは相対指定。 (あれば)My\Hoge名前空間のPiyoクラスのインスタンス作成(グローバルは探索しません。)
}
}
PackagistはComposerのパッケージポータルです。コンポーネントをPackagistへ登録するときはコンポーネントのcomposer.jsonへ名前空間をコンポーネント内のどのディレクトリへマッピングするかautoloaderへ知らせるための記載が必要です。
Beneath the psr-4 property, you map the component’s namespace prefix to a filesystem path relative to the component’s root directory.
出典 Modern PHP: New Features and Good Practices
例
monolog
|
monolog
|
|--src
|
|-- Monolog
|
|-- ....
|
|-- composer.json
composer.json
{
...
"autoload": {
"psr-4": {"Monolog\\": "src/Monolog"}
},
}
composer.jsonのautoloadプロパティへ設定する名前空間の区切りはバックスラッシュ2つです。
(JSONはバックスラッシュをエスケープする必要があるためです。)
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
class Some {
function log() {
$log = new Logger('Monolog');
$log->pushHandler(new StreamHandler('./monolog.log', Logger::DEBUG));
$log->addInfo('Information.');
$log->addError('Error message : ' . __DIR__ );
$log->addDebug('Debug message.: ' . __DIR__ );
}
}
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。