<?
$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
и почитай еще тут 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. Создание экземпляра класса
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; - что за херня
Спустя 2 дня, 8 часов, 55 минут, 22 секунды (15.09.2010 - 17:56) SlavaFr написал(а):
Цитата (Dezigo @ 13.09.2010 - 06:01) |
в классе делать global $i; - что за херня |
а как по другому запутать себя и других и при этом зделать класс не кому ненужным?
это же круто подсунуть комунибудь скрипт, чтоб они потом 3 дня разберались пчему переменая $i по непонятным причинам изменила свое значение!
Спустя 6 минут, 31 секунда (15.09.2010 - 18:02) Ice написал(а):
а ты что тоже приверженец данной методы?
Спустя 16 часов, 32 минуты, 50 секунд (16.09.2010 - 10:35) SlavaFr написал(а):
Цитата (Ice @ 15.09.2010 - 15:02) |
а ты что тоже приверженец данной методы? |
Нет, но возможно пременю эту технику в случае сокращения персонала на работе.
Если у других для нас нет работы, то мы ее должны создать сами посредством скриптов, которые мы сами не в состоянии разобрать.
Все, достаточно посмеялись.
@akyrzaman применяй лучше в таких случаях статические переменные типа MyClass::$i .
представь, что ты завтра будеш цикл писать, а как известно мы все любим в циклах именно $i пременять.
for($i=0;$i<10;$i++){
.....
$obj = new MyClass();
....
$obj=null;
....
}
возникнит вопрос, который ты здесь захочеш задать: "почему в этом цикле $i не принимает нечетное значение типа 3,5,7 ?"
И не кто тебе не сможет помочь, так как в предоставленном коде действительно нет этого участка. Прейдется в полном смысле этого слова перелопатить все функции и классы которые вызываются в этом цикле.