Другие языки программирования и технологии
ООП в PHP (взаимодействие между объектами)
Скажите пожалуйста, возможно ли вызвать из метода одного объекта, метод другого объекта. Классы разные.
Ну да. А в чём проблема-то
class test
{
function __construct($obj)
{
$obj->foo();
}
}
class test
{
function __construct($obj)
{
$obj->foo();
}
}
Метод-конструктор вызывается автоматически при каждом создании объекта. И хотя конструктор появился в PHP давно (эту роль выполнял метод, названный именем класса) , но в PHP 5 была изменена схема именования конструктора - метод __construct() является теперь конструктором класса.
Аналогично, при уничтожении объекта вызывается специальный метод __destruct() – деструктор класса.
?php
class MyClass {
function __construct() {
echo "Запущен конструктор";
}
function __destruct() {
echo "Запущен деструктор";
}
}
$obj = new MyClass(); // Выводит "Запущен конструктор"
unset($obj); // Выводит "Запущен деструктор"
?
Если же необходимо вызвать конструктор или деструктор базового класса, то необходимо это делать явно, через указатель parent.
?php
class MyClass {
function __construct() {
echo "Запущен конструктор базового класса";
}
function __destruct() {
echo "Запущен деструктор базового класса";
}
}
class MyClass1 extends MyClass {
function __construct() {
parent::__construct();
}
function __destruct() {
parent::__destruct();
}
}
$obj = new MyClass1(); // Выводит "Запущен конструктор
// базового класса"
unset($obj); // Выводит "Запущен деструктор базового класса"
?>
Для целей совместимости с предыдущей версией PHP 5 поступает следующем образом: если при создании объекта в классе не найдет конструктор __construct(), то PHP пытается выполнить метод, имя которого совпадает с именем класса.
Аналогично, при уничтожении объекта вызывается специальный метод __destruct() – деструктор класса.
?php
class MyClass {
function __construct() {
echo "Запущен конструктор";
}
function __destruct() {
echo "Запущен деструктор";
}
}
$obj = new MyClass(); // Выводит "Запущен конструктор"
unset($obj); // Выводит "Запущен деструктор"
?
Если же необходимо вызвать конструктор или деструктор базового класса, то необходимо это делать явно, через указатель parent.
?php
class MyClass {
function __construct() {
echo "Запущен конструктор базового класса";
}
function __destruct() {
echo "Запущен деструктор базового класса";
}
}
class MyClass1 extends MyClass {
function __construct() {
parent::__construct();
}
function __destruct() {
parent::__destruct();
}
}
$obj = new MyClass1(); // Выводит "Запущен конструктор
// базового класса"
unset($obj); // Выводит "Запущен деструктор базового класса"
?>
Для целей совместимости с предыдущей версией PHP 5 поступает следующем образом: если при создании объекта в классе не найдет конструктор __construct(), то PHP пытается выполнить метод, имя которого совпадает с именем класса.
Похожие вопросы
- Оправдано ли ООП в PHP?
- Зачем нужно в с++ ООП? Ну классы, объекты? Если в си их не было, но язык исаользуется по сей день.
- инициализация объекта в php?
- Изучнние ООП - стоит ли сейчас?
- ООП. Стоит ли браться за ООП новичку в программировании?:
- ООП - зло. Ваше мнение.
- Объектно ориентированное программирование. (ООП)
- Что такое ООП для человека который не знает других парадигм
- Зачем нужно ООП?
- ООП, интересно узнать ...