Прочитал про деструкторы, возникли пару вопросов. 1)Для того чтоб новосозданный объект удалился с оперативной памяти не достатоно лишь прописать деструктор в классе, ещё отдельно нужно прописать название объекта в функции unset? 2)Если деструктор освобождает память, решил сделать бесконечный цикл, который бы выводил результат вызова автоматически созданного объекта. Вот написал код. PHP: <?php class User{ public $name; public $login; public $password; function __construct($name,$login,$password){ echo "Имя: $name <br>"; echo "Логин: $login "; echo "<br> Пароль: $password <br><br>"; } function __destruct(){ } } class SuperUser extends User{ public $role = "Ялта<br><br>"; } $object = new SuperUser("Super Admin","root","pass@word1"); echo $object->role; for(;;){ $obj1 = new User("Пушкин","Pisatel","111"); unset($obj1); } ?> Цикл работает, но ничего не выводит, а я хотел чтоб выводил, удалил созданный объект, снова вывел и так бесконечно.
А почему такой код, вызывает ещё в придачу деструктора? Ведь деструктор вызывается только в том случаи когда удалился объект функцией unset() ? PHP: <?php class A{ public $f = 5; function __destruct(){ echo " УРА !"; } } $obj = new A(); echo $obj->f; ?>
PHP: class A{ public $f = 5; function __destruct(){ echo " УРА !"; } } $obj = new A(); echo $obj='Denis'; 1)Cначала выводит УРА а только потом Denis, почему так? 2)Как это объекту можно присваивать стрковые значения?
по первому вопросу - деструктор создан для того, чтобы выполнить действия перед удалением объекта из памяти. Т.е. unset тебе вызывать надо, а деструктор если он есть - выполнится после вызова unset, но перед удалением объекта из памяти По второму посту - деструктор вызывается при удалении объекта из памяти. После того как скрипт отработал - происходит удаление объектов, а значит вызываются прописанные деструкторы По третьему посту - ты вдумайся что делаешь последней строчкой)))) Объекту ничего не присваивается - $obj - это не объект, а ссылка на объект, который находится в памяти. $obj='Denis' - ты вместо ссылки на объект присваиваешь $obj строковое значение. Соответственно объект удаляется из памяти, вызывается его деструктор, ну а потом ты просто выводишь свое значение - echo "Denis"