kakserpom / phpdaemon

Asynchronous server-side framework for network applications implemented in PHP using libevent
http://daemon.io/
GNU Lesser General Public License v3.0
1.53k stars 231 forks source link

nestead functions #199

Closed FallDi closed 9 years ago

FallDi commented 9 years ago

I can't understand but i think problem in phpdaemon. I double check all my includes is right(not double include or something like this - problem is not deterministic)

APP contains something like this

class A { public function a() { function b() { } } }

some times it return bad gateway; log of phpdaemon

[Tue, 3 Feb 2015 06:12:47.603961 +0000] W#31602 crashed by error 'Cannot redeclare Namespace\a() (previously declared in /some/path/file.php:1649)' at /some/path/file.php:1649

kakserpom commented 9 years ago

Коли не знаете английского, пишите по-русски. Вы используете явный include? Почему не хотите положиться на autoloader?

FallDi commented 9 years ago

Пишу по-английски как могу - извиняйте =)

Используем исключительно require_once явный да. Autoload чуть-чуть медленнее. Получилось обойти используя анонимные функции.

Немного доп.информации - может быть поможет php -v PHP 5.4.17 (cli) (built: Oct 2 2013 16:18:19) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

никаких акселераторов или apc не используем

kakserpom commented 9 years ago

Лолшто? Чуть-чуть медленнее... а не всё ли равно если это происходит только единожды, а при каждом запросе?

FallDi commented 9 years ago

На самом деле не важно автолоад или абсолютные инклуды.

Просто чистый файл приложения без всяких инклудов

class ZZZApi extends \PHPDaemon\Core\AppInstance {

public function init() {
    error_reporting(0);
}

public function beginRequest($request, $upstream) {
    function c() {}
    return new ZZZApiRequest($this, $upstream, $request);
}

}

и вот лог ошибки [Tue, 3 Feb 2015 06:42:17.940740 +0000] W#35310 crashed by error 'Cannot redeclare PHPDaemon\Applications\c() (previously declared in /xxx/PHPDaemon/ZZZApi.php:31)' at /xxx/PHPDaemon/ZZZApi.php:31

kakserpom commented 9 years ago

Ну естественно,

function a() {function b(){}}; a(); a(); Fatal error: Cannot redeclare b() (previously declared in php shell code:1) in php shell code on line 1

FallDi commented 9 years ago

извиняйте за беспокойство. я затупил(