Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: баг в интерпретаторе

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
OrmaJever
Отправлено: 18 Февраля, 2013 - 15:20:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




php 5.4
PHP:
скопировать код в буфер обмена
  1. class A {
  2.         public function __construct()
  3.         {
  4.                 unset($this);
  5.                 var_dump($this);
  6.         }
  7. }
  8. new A();

Веб сервер падает, хотя по идее должен быть нотис.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 18 Февраля, 2013 - 15:51:36
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нет. Ничего не происходит, кроме выдачи notice (как в CLI, так и через веб-сервер):
CODE (bash):
скопировать код в буфер обмена
  1. PHP Notice:  Undefined variable: this in /test.php on line 7
  2.  
  3. Notice: Undefined variable: this in /test.php on line 7
  4. NULL

CODE (bash):
скопировать код в буфер обмена
  1. PHP 5.4.10 (cli) (built: Dec 21 2012 02:26:50)
  2. Copyright (c) 1997-2012 The PHP Group
  3. Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

CODE (bash):
скопировать код в буфер обмена
  1. Server version: Apache/2.4.3 (Unix)
  2. Server built:   Aug 23 2012 11:07:26


Пример: это:
CODE (bash):
скопировать код в буфер обмена
  1. user@host:/path$ cat test.php
  2. <?php
  3. class Foo
  4. {
  5.         function  __destruct()
  6.         {
  7.                 return new Foo();
  8.         }
  9. }
  10. new Foo();

->


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
OrmaJever
Отправлено: 18 Февраля, 2013 - 18:33:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




EuGen пишет:
Нет. Ничего не происходит, кроме выдачи notice (как в CLI, так и через веб-сервер):

эээ, так не честно! 5.4.11 под win, использую CLI, и он благополучно падает от вышеуказаного куска кода!


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 18 Февраля, 2013 - 19:02:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Обновлю до 5.4.11 - проверю. Пока сказать не могу ничего.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LaoSun
Отправлено: 29 Марта, 2013 - 06:59:16
Post Id



Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




У меня php: 5.3.9, Apache API Version: 20051115.

Та же самая проблема - падает на такой конструкции.

После получасового ковыряния, удалось выявить приблизительный источник проблемы.
---
Для наглядности примера изменим конструкцию (падать после изменения все равно будет)
КОД: 1
PHP:
скопировать код в буфер обмена
  1. header('Content-Type: text/plain;');
  2. class A {
  3.         public $var     = "value";
  4.         public function __construct( $param = '' )
  5.     {
  6.                 $this;
  7.                 //unset($this);
  8.                 print_r( get_defined_vars( ) );
  9.         }
  10. }
  11. $A = new A( "some" );



Запускаем код выше и в браузере видим следующее.
ИТОГ: 1
PHP:
скопировать код в буфер обмена
  1. (
  2.     [param] => some
  3.     [this] => A Object
  4.         (
  5.             [var] => value
  6.         )
  7.  
  8. )



Раскоментируем unset на 7 мой строке и с первым же запуском Apache ляжет.


Теперь пробуем пофиксить падения

Вариант 1:
- Добавить get_defined_vars( ); перед unset.
(правильно без нечего, лищ для того, чтобы она была и вызывалась)


Вариант 2:
КОД: 2
PHP:
скопировать код в буфер обмена
  1. header('Content-Type: text/plain;');
  2. class A {
  3.         public $var     = "value";
  4.         public function __construct( $param = '' )
  5.     {
  6.                 $this;
  7.                 // ФИКС
  8.                 $t="t";
  9.                 $$t=$t;
  10.                 // Или тоже самое одной строкой
  11.                 //$$t=$t="t";
  12.                 unset($this);
  13.                 print_r( get_defined_vars( ) );
  14.         }
  15. }
  16. $A = new A( "some" );



Оба варианта не дают произойти падению (у меня, как у вас, попробуйте/скажите).


РАЗБОР ПОЛЕТОВ

из `КОД: 1` видно что this последняя в окружении и ее удаление вызывает собственно падение.

Если в `КОД: 2` закоментировать unset, то вы увидите
ИТОГ: 2
PHP:
скопировать код в буфер обмена
  1. (
  2.     [param] => some
  3.     [this] => A Object
  4.         (
  5.             [var] => value
  6.         )
  7.  
  8.     [t] => t
  9. )


Где `this` уже не последняя и как итог при ее удалении, все работает как надо.


P.S. почему get_defined_vars() не дает падать ХЗ, остается загадкой.

(Отредактировано автором: 29 Марта, 2013 - 07:01:35)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB