PHP 5.3 уже не новость и о нем много написано (и как-то приелось после выхода версии 5.4).
Однако хотелось бы остановиться на одной из его особенностей.
Одной из наиболее ярких особенностей этой версии является поддержка пространств имен, что повлекло за собой изменение парадигмы программирования PHP. Соответственно, многие, известные и не очень, фреймворки начали переписывать свой код по-новому.
Эта статья именно то, к чему все это привело.
Небольшой пример*:
\\index.php
namespace Zend\Date {
function is_object($date) {
echo "Zend Date constructor is called with param {$date}";exit;
}
}
namespace Foo {
require_once 'zf2/library/Zend/Loader/AutoloaderFactory.php';
\Zend\Loader\AutoloaderFactory::factory(array('Zend\Loader\StandardAutoloader' => array()));
$date = new \Zend\Date\Date('2012-03-18');
}
Что тут происходит? Я переопределил функцию is_object, которая вызывается в самом начале конструктора \Zend\Date\Date. Если вы измените определение функции так, чтобы значение передавалось по ссылке, вы сможете изменить не только результат, но и сами параметры, передаваемые в функцию.
Этот код работает, потому что php по умолчанию ищет функцию в объявленном пространстве имен и только если ее там нет, переходит к поиску в глобальном пространстве имен.
И мы можем объявлять пространства имен с одинаковыми именами где угодно и столько раз, сколько захотим.
Кстати, та же история и с константами.
Эта функция предоставляет отличные возможности отладки и тестирования (прощай, Runkit), но она также открывает огромную дыру в безопасности приложения.
Если вы считаете, что эта функция является проблемой для вашего кода, то вы можете избежать ее, просто добавив обратную косую черту (\) к вызову функции (константы).
Тогда PHP немедленно начнет искать определение в глобальном пространстве имен.
В заключение хочу сказать, что на данный момент подобные вещи можно делать в Zend, Symfony, Doctrine. * — версия интерпретатора 5.4.0RC9-dev УПД: Часто задаваемые вопросы: что нужно знать о пространствах имен Теги: #php #php
-
Удаленный Доступ К Облаку
19 Dec, 24 -
Вы Что, Замыкания В Javascript?
19 Dec, 24 -
Uwp — Проблема № 187
19 Dec, 24