Могут ли пространства имен PHP содержать переменные? Если да, то как это можно осуществить?
Нет. Вы можете установить переменную после объявления пространства имен, но переменные всегда будут существовать в глобальной области. Они никогда не привязаны к пространствам имен. Вы можете сделать вывод, что из-за отсутствия каких-либо описаний разрешения имен в
Также не было бы разрешенного синтаксиса для нахождения переменных в пространстве имен.
print \namespace\$var; // syntax error print "${namespace\\var}"; // "unexpected T_NS_SEPARATOR"
Попробуй это
<?php namespace App\login; $p = 'login'; $test2 = '\App\\'.$p.'\\MyClass'; $test = new $test2;
Нет, они не могут, как сказал марио.
Для инкапсуляции переменных используются классы . Следует, безусловно, избегать загрязнения глобального пространства переменных.
пример
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 );
Это можно сделать – вроде.
Это, вероятно, очень плохо и никогда не должно быть сделано, но это возможно, используя переменные переменные и магическую константу для пространства имен. Итак, строковая переменная для обозначения переменной, которую мы хотим использовать, например:
<?php namespace your\namespace; $varname = __NAMESPACE__.'\your_variablename'; //__NAMESPACE__ is a magic constant $namespaced_variable = $$varname; //Note the double dollar, a variable variable ?>
Я прошу не согласиться с этим руководством, МЫ МОЖЕМ .
http://php.net/manual/en/language.namespaces.dynamic.php
<?php namespace namespacename; class classname { function __construct() { echo __METHOD__,"\n"; } } function funcname() { echo __FUNCTION__,"\n"; } const constname = "namespaced"; /* note that if using double quotes, "\\namespacename\\classname" must be used */ $a = '\namespacename\classname'; $obj = new $a; // prints namespacename\classname::__construct $a = 'namespacename\classname'; $obj = new $a; // also prints namespacename\classname::__construct $b = 'namespacename\funcname'; $b(); // prints namespacename\funcname $b = '\namespacename\funcname'; $b(); // also prints namespacename\funcname echo constant('\namespacename\constname'), "\n"; // prints namespaced echo constant('namespacename\constname'), "\n"; // also prints namespaced