PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

名前空間と動的言語機能 | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

名前空間と動的言語機能

(PHP 5 >= 5.3.0, PHP 7)

PHP における名前空間の実装は、PHP 自身が動的プログラミング言語であるという性質に影響を受けています。 したがって、次の例のようなコードを名前空間を使って書き直すには

例1 要素への動的なアクセス

example1.php:

<?php
class classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "global";

$a 'classname';
$obj = new $a// classname::__construct と表示します
$b 'funcname';
$b(); // funcname と表示します
echo constant('constname'), "\n"// global と表示します
?>
完全修飾名 (クラス名に名前空間プレフィックスをつけたもの) を使う必要があります。 動的なクラス名、関数名あるいは定数名においては修飾名と完全修飾名に差はないので、 先頭のバックスラッシュはなくてもかまいません。

例2 名前空間つき要素への動的なアクセス

<?php
namespace namespacename;
class 
classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "namespaced";

/* ダブルクォートを使う場合は "\\namespacename\\classname" としなければなりません */
$a '\namespacename\classname';
$obj = new $a// namespacename\classname::__construct と表示します
$a 'namespacename\classname';
$obj = new $a// これも namespacename\classname::__construct と表示します
$b 'namespacename\funcname';
$b(); // namespacename\funcname と表示します
$b '\namespacename\funcname';
$b(); // これも namespacename\funcname と表示します
echo constant('\namespacename\constname'), "\n"// namespaced と表示します
echo constant('namespacename\constname'), "\n"// これも namespaced と表示します
?>

文字列中の名前空間名のエスケープに関する注意 を読んでおくことを忘れないようにしましょう。


忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「名前空間と動的言語機能」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | 名前空間と動的言語機能」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: