[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Наследование PHP
romantik2011

<?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) масло масляное получилось, что ты имеешь ввиду?

Спустя 37 минут, 31 секунда (23.07.2011 - 20:22) romantik2011 написал(а):
Сорри, то выше я уже разобрался.

Прочитал про деструкторы, возникли пару вопросов.

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 ничего не освобождает в памяти, он всего лишь вызывается при уничтожении объекта.

Спустя 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.

Вот пример:


<?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'
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.