Добавление свойств в базовый объект

Задача
Необходимо создать объект и добавить в него свойства, но не определяя его формально как отдельный класс. Это удобно, когда нужна функция, требующая объект с определенными свойствами, например такой, который возвращает функция mysql_fetch_object() или функция imap_header().

Решение
Это делается при помощи встроенного базового класса stdClass:

$pickle = new stdClass;
$pickle->type = 'fullsour';


Обсуждение
Точно так же, как функция array() возвращает пустой массив, создание объекта типа stdClass предоставляет объект без свойств и методов.

Как и в случае объектов, принадлежащих другим классам, можно создавать новые свойства объекта, присваивать им значения и проверять эти свойства:

$guss = new stdClass;
$guss->location = 'Essex';
print "$guss->location\n";$guss->location = 'Orchard';
print "$guss->location\n";
Essex
Orchard


Однако после того как создан экземпляр объекта, методы добавлять нельзя.

Создание объекта типа stdClass полезно, когда нужна функция, принимающая базовый объект, такой, который возвращает функция, делающая выборку из базы данных, но вы не хотите посылать запрос в базу данных. Например:

function pc_format_address($obj) {
return "$obj->name <$obj->email>";
}
$sql = "SELECT name, email FROM users WHERE id=$id";
$dbh = mysql_query($sql);
$obj = mysql_fetch_object($dbh);
print pc_format_address($obj);
David Sklar <david@example.com>


Функция pc_print_address() принимает имя и адрес электронной почты и преобразует эти значения в формат, необходимый для полей To и From в почтовой программе. Ниже показано, как вызывать такую функцию, не вызывая функцию mysql_fetch_object():

$obj = new stdClass;
$obj->name = 'Adam Trachtenberg';
$obj->email = 'adam@example.com';
print pc_format_address($obj);
Adam Trachtenberg

Теги:
классы, объекты, ооп
Добавлено: 21 Июля 2018 16:17:24 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...