web-dev-qa-db-ja.com

PHP名前空間に変数を含めることはできますか?

PHP名前空間に変数を含めることができますか?その場合、どのようにこれを達成できますか?

52
EmpireJones

いいえ。ネームスペースの宣言後に変数を設定できますが、変数は常にグローバルスコープに存在します。名前空間にバインドされることはありません。あなたは名前解決の説明がないことからそれを推測することができます

また、ネームスペース内の変数を見つけるための許可された構文はありません。

print \namespace\$var;      // syntax error

print "${namespace\\var}";  // "unexpected T_NS_SEPARATOR"
39
mario

これを試して

<?php
namespace App\login; 

$p = 'login';
$test2 = '\App\\'.$p.'\\MyClass';

$test = new $test2;
18
Maxim

いいえマリオが言ったように、できません。

変数をカプセル化するには、Classesを使用します。グローバル変数スペースの汚染は絶対に避けてください。

  • class_dbworker.php:

    class DbWorker
    {
        //properties and method logic
    }
    
    class DbWorkerData
    {
        public static $hugerelationsmap = array(....);
        public static ....
    }
    

    mainapp.php:

    include_once 'class_dbworker.php';
    print_r( DbWorkerData::$hugerelationsmap );
    
  • 名前空間を使用した例

    class_dbworker.php:

    namespace staticdata;
    class DbWorker
    {
        //properties and method logic
    }
    
    class DbWorkerData
    {
        public static $hugerelationsmap = array(....);
        public static ....
    }
    

    mainapp.php:

    include_once 'class_dbworker.php';
    
    use staticdata as data;
    
    print_r( \data\DbWorkerData::$hugerelationsmap );
    
11
Lorenz Lo Sauer