Добро пожаловать на форум PHP программистов!
За последние 24 часа нас посетили 6475 программистов и 515 роботов. Сейчас ищут 166 программистов ...
Приступая к работе

Пространства имен и динамические особенности языка

Вернуться к: Пространства имен

(PHP 5 >= 5.3.0, PHP 7)

На реализацию пространств имен в 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";

include 
'example1.php';

$a 'classname';
$obj = new $a// выводит classname::__construct
$b 'funcname';
$b(); // выводит funcname
echo constant('constname'), "\n"// выводит global

/* обратите внимание, что при использовании двойных кавычек символ обратного слеша должен быть заэкранирован. Например, "\\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
?>

Обязательно прочитайте примечание об экранировании имен пространства имен в строках.



Вернуться к: Пространства имен

© 2018 «PHP.RU — Сообщество PHP-Программистов»
Главная | Форум | Реклама на сайте | Контакты VIP Сувениры
Разработка компании ODware