[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу заставить __destruct() родить переменную
akyrzaman
Суть проблемы:


<?
$i = 0;

class MyClass {
public function __destruct(){
global $i;
$i++;
print 'In class: '.$i."<br />";
return $i;
}
}


$obj = new MyClass();
print 'After class: '.$i.'<br />';
?>


Выводит:

After class: 0
In class: 1

Я только начинаю постигать азы ООП, почему сначала скрип вывел 'After class' а не 'In class' ?

И как мне заставить __destruct увеличить $i в глобальном масштабе, чтобы After class уже имел не 0 а 1?



Спустя 31 минута, 47 секунд (10.09.2010 - 19:00) Lenarfate написал(а):
вообще __destruct высвобождает память от класса. наверное тебе все-таки нужен __construct.
и почитай еще тут http://www.irbis-team.com/15/8

Спустя 1 час, 1 минута, 19 секунд (10.09.2010 - 20:01) amazing написал(а):
Скорее всего потому что деструктор срабатывает в конце скрипта, когда на методы/свойства объекта нету ссылок.

Что бы явно вызвать деструктор:
unset($obj);



Спустя 1 час, 11 минут, 42 секунды (10.09.2010 - 21:13) linker написал(а):
Объясняю по шагам:
1. Создание экземпляра класса
$obj = new MyClass();
2. Вывод
print 'After class: '.$i.'<br />';
3. Конец скрипта и срабатывание деструктора объекта и вывод
print 'In class: '.$i."<br />";

Спустя 10 часов, 24 минуты, 28 секунд (11.09.2010 - 07:38) akyrzaman написал(а):
спасибо, понял в чём соль.

Спустя 2 дня, 1 час, 23 минуты (13.09.2010 - 09:01) Dezigo написал(а):
в классе делать global $i; - что за херня ohmy.gif

Спустя 2 дня, 8 часов, 55 минут, 22 секунды (15.09.2010 - 17:56) SlavaFr написал(а):
Цитата (Dezigo @ 13.09.2010 - 06:01)
в классе делать global $i; - что за херня ohmy.gif

а как по другому запутать себя и других и при этом зделать класс не кому ненужным?
это же круто подсунуть комунибудь скрипт, чтоб они потом 3 дня разберались пчему переменая $i по непонятным причинам изменила свое значение!

Спустя 6 минут, 31 секунда (15.09.2010 - 18:02) Ice написал(а):
а ты что тоже приверженец данной методы? biggrin.gif

Спустя 16 часов, 32 минуты, 50 секунд (16.09.2010 - 10:35) SlavaFr написал(а):
Цитата (Ice @ 15.09.2010 - 15:02)
а ты что тоже приверженец данной методы? biggrin.gif

Нет, но возможно пременю эту технику в случае сокращения персонала на работе.
Если у других для нас нет работы, то мы ее должны создать сами посредством скриптов, которые мы сами не в состоянии разобрать.

Все, достаточно посмеялись.
@akyrzaman применяй лучше в таких случаях статические переменные типа MyClass::$i .

представь, что ты завтра будеш цикл писать, а как известно мы все любим в циклах именно $i пременять.

for($i=0;$i<10;$i++){
.....
$obj = new MyClass();
....

$obj=null;
....


}


возникнит вопрос, который ты здесь захочеш задать: "почему в этом цикле $i не принимает нечетное значение типа 3,5,7 ?"
И не кто тебе не сможет помочь, так как в предоставленном коде действительно нет этого участка. Прейдется в полном смысле этого слова перелопатить все функции и классы которые вызываются в этом цикле.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.