Closed andrey-oparin closed 10 years ago
Пришлёте pull request? ;-)
мне не удалось исправить проблему непосредственно в вашем модуле, вместо этого использую описанный хак в моем приложении, могу привести пример наследника AppInstance
Чтобы воспроизвести проблему с пространством имен при обращении к стандартным функциям, переопределяемым в методе overrideNativeFuncs(), достаточно заменить вызов $this->header('Content-Type: text/html') на header('Content-Type: text/html') в любом из примеров в каталоге Examples. При этом возникнет ошибка Call to undefined function header(), так как функция header переопределена в пространстве имен PHPDaemon\Thread, и для корректного вызова приходится использовать пространство имен PHPDaemon\Thread\header('Content-Type: text/html')
нужно сделать так чтобы стандартная функция header была доступна в глобальном пространстве имен без использования хака вида runkit_function_rename('PHPDaemon\Thread\header', 'header');
Ну как, всё работает?
После исправления приложение вылетает с ошибкой Unexcepted shutdown
Я исправил проблему, при попытке сделать push в ветку andrey.oparin/namespacebug получаю ошибку:
Permission to kakserpom/phpdaemon.git denied to andrey.oparin@gmail.com.
Вы не туда пушите.
куда нужно пушить ?
Ну очевидно в свой репозиторий, а не в основной. А дальше pull request.
Пока все плохо:
PHP Parse error: syntax error, unexpected '\' (T_NS_SEPARATOR), expecting '(' in
vendor/kakserpom/phpdaemon/PHPDaemon/Thread/Worker.php on line 263
php -v
5.5.9
и PHPStorm ругается на несовпадающую сигнатуру header
Очень странно, у меня все работает. Пока откатите попробую немного по другому исправить. Или исправьте сами, суть в том что нужно функцию overrideNativeFuncs() выделить в корневой namespace как в моем примере. Переопределение стандратных функций с префиксом \ внутри пространства имен PHPDaemon\Thread не решает проблему.
А в чем проблема с переименованием? Из \PHPDaemon\Thread в . Не работает?
18 февраля 2014 г., 7:45 пользователь andrey-oparin < notifications@github.com> написал:
Очень странно, у меня все работает. Пока откатите попробую немного по другому исправить. Или исправьте сами, суть в том что нужно функцию overrideNativeFuncs() выделить в корневой namespace как в моем примере. Объявление функций с префиксом \ внутри пространства имен PHPDaemon\Thread\header не решает проблему.
Reply to this email directly or view it on GitHubhttps://github.com/kakserpom/phpdaemon/issues/165#issuecomment-35349991 .
@kakserpom У меня на php 5.5.9
упало с
PHP Parse error: syntax error, unexpected '\' (T_NS_SEPARATOR), expecting '(' in
vendor/kakserpom/phpdaemon/PHPDaemon/Thread/Worker.php on line 263
Черт, всё понятно, просто в git не попали нужные изменения. Глядите теперь, запушил.
У меня работает
andrey-oparin: извините что так вышло, реально не запушилось у меня сначало, поэтому так долго баг исправлялся по факту.
спасибо за исправление
Стандартные функции PHP переопределяются в пространстве имен PHPDaemon\Thread
для обхода проблемы приходится использовать следущий хак:
runkit_function_rename('PHPDaemon\Thread\header', 'header'); runkit_function_rename('PHPDaemon\Thread\headers_sent', 'headers_sent'); runkit_function_rename('PHPDaemon\Thread\is_uploaded_file', 'is_uploaded_file'); runkit_function_rename('PHPDaemon\Thread\move_uploaded_file', 'move_uploaded_file'); runkit_function_rename('PHPDaemon\Thread\is_uploaded_file', 'is_uploaded_file'); runkit_function_rename('PHPDaemon\Thread\headers_list', 'headers_list'); runkit_function_rename('PHPDaemon\Thread\setcookie', 'setcookie'); runkit_function_rename('PHPDaemon\Thread\register_shutdown_function', 'register_shutdown_function'); runkit_function_rename('PHPDaemon\Thread\create_function', 'create_function');
..........................................................
namespace PHPDaemon\Thread;