За последние 24 часа нас посетили 50496 программистов и 1758 роботов. Сейчас ищут 839 программистов ...

Деструкторы PHP

Тема в разделе "PHP для новичков", создана пользователем romantik2011, 23 июл 2011.

  1. romantik2011

    romantik2011 Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    Прочитал про деструкторы, возникли пару вопросов.

    1)Для того чтоб новосозданный объект удалился с оперативной памяти не достатоно лишь прописать деструктор в классе, ещё отдельно нужно прописать название объекта в функции unset?
    2)Если деструктор освобождает память, решил сделать бесконечный цикл, который бы выводил результат вызова автоматически созданного объекта.
    Вот написал код.
    PHP:
    1.  
    2. <?php
    3. class User{
    4. public  $name;
    5. public $login;
    6. public $password;
    7.    
    8. function __construct($name,$login,$password){
    9.    echo "Имя:  $name <br>";
    10.    echo "Логин: $login ";
    11.    echo "<br> Пароль:  $password <br><br>";
    12.  }
    13.  
    14.  function __destruct(){
    15.  }
    16.  
    17. }
    18.  
    19. class SuperUser extends User{
    20. public $role = "Ялта<br><br>";
    21. }
    22.  
    23. $object = new SuperUser("Super Admin","root","pass@word1");
    24. echo $object->role;
    25.  
    26. for(;;){ $obj1 = new User("Пушкин","Pisatel","111");
    27. unset($obj1);
    28. }
    29.  
    30.  
    31. ?>
    32.  
    Цикл работает, но ничего не выводит, а я хотел чтоб выводил, удалил созданный объект, снова вывел и так бесконечно.
     
  2. romantik2011

    romantik2011 Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    А почему такой код, вызывает ещё в придачу деструктора? Ведь деструктор вызывается только в том случаи когда удалился объект функцией unset() ?
    PHP:
    1.  
    2. <?php
    3. class A{
    4. public $f = 5;
    5. function __destruct(){
    6. echo " УРА !";
    7. }
    8. }
    9.  
    10. $obj = new A();
    11. echo $obj->f;
    12. ?>
    13.  
     
  3. romantik2011

    romantik2011 Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    PHP:
    1. class A{
    2. public $f = 5;
    3. function __destruct(){
    4. echo " УРА !";
    5. }
    6. }
    7.  
    8. $obj = new A();
    9.  
    10. echo $obj='Denis';
    1)Cначала выводит УРА а только потом Denis, почему так?
    2)Как это объекту можно присваивать стрковые значения?
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    по первому вопросу - деструктор создан для того, чтобы выполнить действия перед удалением объекта из памяти.
    Т.е. unset тебе вызывать надо, а деструктор если он есть - выполнится после вызова unset, но перед удалением объекта из памяти

    По второму посту - деструктор вызывается при удалении объекта из памяти. После того как скрипт отработал - происходит удаление объектов, а значит вызываются прописанные деструкторы

    По третьему посту - ты вдумайся что делаешь последней строчкой))))

    Объекту ничего не присваивается - $obj - это не объект, а ссылка на объект, который находится в памяти.
    $obj='Denis' - ты вместо ссылки на объект присваиваешь $obj строковое значение. Соответственно объект удаляется из памяти, вызывается его деструктор, ну а потом ты просто выводишь свое значение - echo "Denis"