<?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(){
echo "delete";
}
}
class SuperUser extends User{
public $role = "Ялта";
}
$object = new SuperUser("Super Admin","root","pass@word1");
$object->role;
$obj1 = new User("Пушкин","Pisatel","111");
$obj2 = new User("Клоун","Santa","555");
$obj3 = new User("Жираф","ura","888");
unset($obj1);
?>
1)Почему вызов свойства $object->role; не выводит на экран значение свойства "Ялта"?
2)Как это можно передавать 3 аргумента из класса потомка если в классе-потомке не создан конструктор с 3 аргументами и вообще никакой конструктор не создан в классе-потомке?
Спустя 6 минут, 45 секунд (23.07.2011 - 19:45) denash написал(а):
1) потомучто ты только обращаешся к свойству, но не выводишь её (echo, print)
2) масло масляное получилось, что ты имеешь ввиду?
2) масло масляное получилось, что ты имеешь ввиду?
Спустя 37 минут, 31 секунда (23.07.2011 - 20:22) romantik2011 написал(а):
Сорри, то выше я уже разобрался.
Прочитал про деструкторы, возникли пару вопросов.
1)Для того чтоб новосозданный объект удалился с оперативной памяти не достатоно лишь прописать деструктор в классе, ещё отдельно нужно прописать название объекта в функции unset?
2)Если деструктор освобождает память, решил сделать бесконечный цикл, который бы выводил результат вызова автоматически созданного объекта.
Вот написал код.
Цикл работает, но ничего не выводит, а я хотел чтоб выводил, удалил созданный объект, снова вывел и так бесконечно.
Прочитал про деструкторы, возникли пару вопросов.
1)Для того чтоб новосозданный объект удалился с оперативной памяти не достатоно лишь прописать деструктор в классе, ещё отдельно нужно прописать название объекта в функции unset?
2)Если деструктор освобождает память, решил сделать бесконечный цикл, который бы выводил результат вызова автоматически созданного объекта.
Вот написал код.
<?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);
}
?>
Цикл работает, но ничего не выводит, а я хотел чтоб выводил, удалил созданный объект, снова вывел и так бесконечно.
Спустя 23 минуты, 33 секунды (23.07.2011 - 20:46) denash написал(а):
Функция unset разрушает наш объект (он освобождает память, путём уделения переменной), но в тот момент, когда разрушается объект срабатывает метод __destruct (если метода __destruct в классе нету, то соответственно при уничтожении объекта ничего не произойдёт).
Сам метод __destruct ничего не освобождает в памяти, он всего лишь вызывается при уничтожении объекта.
Сам метод __destruct ничего не освобождает в памяти, он всего лишь вызывается при уничтожении объекта.
Спустя 3 минуты, 34 секунды (23.07.2011 - 20:49) romantik2011 написал(а):
А что тогда нужно сделать, чтоб выводился результат вызова конструктора в бесконечном цикле, и чтоб память освобождалась и результат выводился?
Спустя 10 минут, 31 секунда (23.07.2011 - 21:00) denash написал(а):
<?php
class User{
function __construct(){
echo 'Создн экземпляр <br>';
}
function __destruct(){
}
echo 'Удалён экземпляр <br>';
}
for(;;){
$obj1 = new User(); // Создаём новый экземпляр, занимаем память, на экран выведется Экземпляр создан
unset($obj1); // Удаляем экземпляр, освобождаем память занятую переменной, на экран выводится Удалён экземпляр
}
?>
Это повторяется в бесконечном цикле, и соответственно будет всё время выводить Создан экземпляр Удалён экземпляр и т.д.
Спустя 7 минут, 7 секунд (23.07.2011 - 21:07) romantik2011 написал(а):
А почему такой код, вызывает ещё в придачу деструктора? Ведь деструктор вызывается только в том случаи когда удалился объект функцией unset() ?
<?php
class A{
public $f = 5;
function __destruct(){
echo " УРА !";
}
}
$obj = new A();
echo $obj->f;
?>
Спустя 8 минут, 13 секунд (23.07.2011 - 21:15) denash написал(а):
При завершении скрипта все переменные автоматически уничтожаются.
Нужно помнить, что __destruct вызывается ПРИ УНИЧТОЖЕНИИ ОБЪЕКТА, не обязательно должна быть использована функция unset.
Вот пример:
Нужно помнить, что __destruct вызывается ПРИ УНИЧТОЖЕНИИ ОБЪЕКТА, не обязательно должна быть использована функция unset.
Вот пример:
<?php
class A{
public $f = 5;
function __destruct(){
echo " УРА !";
}
}
$obj = new A();
$obj='Denis'; // тут нам выведет УРА! потомучно переменая $obj сначала была разрушана , и только потом в неё записали string('Denis')
?>
Спустя 30 минут, 1 секунда (23.07.2011 - 21:45) romantik2011 написал(а):
class A{
public $f = 5;
function __destruct(){
echo " УРА !";
}
}
$obj = new A();
echo $obj='Denis';
1)Cначала выводит УРА а только потом Denis, почему так?
2)Как это объекту можно присваивать стрковые значения?
Спустя 12 минут, 18 секунд (23.07.2011 - 21:58) denash написал(а):
1) Потому что сначала переменная $obj разрушается (что приводит к вызову деструктора), после этого в переменную $obj записывается новое значение 'Denis' и только после этого новое значение выводится на экран.
2) Строковое значение мы присваиваем не объекту, а переменнной.
$obj; // это простая пременная.
$obj= new A; // Тут этой переменной присваивается тип object и она становится экземпляром класса A
$obj='AAAA'; // А тут сначала уничтожается object, и только потом в эту переменную записывается строковое значение 'AAAA'
2) Строковое значение мы присваиваем не объекту, а переменнной.
$obj; // это простая пременная.
$obj= new A; // Тут этой переменной присваивается тип object и она становится экземпляром класса A
$obj='AAAA'; // А тут сначала уничтожается object, и только потом в эту переменную записывается строковое значение 'AAAA'