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
Форумы портала PHP.SU :: Версия для печати :: Безконечный цикл в наследовании
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Безконечный цикл в наследовании

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

1. romantik2011 - 23 Июля, 2011 - 20:21:57 - перейти к сообщению
Прочитал про деструкторы, возникли пару вопросов.

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. OrmaJever - 23 Июля, 2011 - 20:29:51 - перейти к сообщению
при бесконечном цыкле ничего не выведет пока не очистите буфер flush()
3. romantik2011 - 23 Июля, 2011 - 21:16:05 - перейти к сообщению
А почему такой код, вызывает ещё в придачу деструктора? Ведь деструктор вызывается только в том случаи когда удалился объект функцией 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.  
4. Мелкий - 23 Июля, 2011 - 21:23:10 - перейти к сообщению
romantik2011 пишет:
Цикл работает, но ничего не выводит

Выведет, когда завершится скрипт. То есть, никогда.

romantik2011 пишет:
А почему такой код, вызывает ещё в придачу деструктора?

При завершении скрипта вызываются деструкторы всех использованных объектов. Как и в других ЯП.
5. romantik2011 - 23 Июля, 2011 - 21:37:57 - перейти к сообщению
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)Как это объекту можно присваивать стрковые значения?
6. Мелкий - 23 Июля, 2011 - 22:27:42 - перейти к сообщению
Потому что вы не объекту присваиваете значение, а переменной. Объект при этом разрушается, вызывая деструктор.

 

Powered by ExBB FM 1.0 RC1