Развитие объектной ориентированности PHP
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: шпаргалки по математике транспорт реферат, инновационная деятельность
| Добавил(а) на сайт: Kaljagin.
Предыдущая страница реферата | 1 2 3 | Следующая страница реферата
if ($bride->setHusband($groom);
$groom->setWife($bride)) {
return true;
} else {
return false;
}
}
wed($joanne, $joe);
print areMarried($joanne, $joe);
?>
(Реализации Woman::setHusband(), Man::setWife() и areMarried() опущены как упражнение читателю).
{ wed — "жениться", bride — "невеста", groom — "жених", husband — "муж", wife — "жена", areMarried — "они женаты?" }
Что возвратит areMarried()? Можно надеяться, что двое новобрачных сумеют остаться женатыми, по крайней мере, до следующей строчки кода, но, как вы могли догадаться, — не останутся. areMarried() подтвердит, что они развелись, как только женились. Почему?
Причина проста. Из-за того, что объекты в PHP 3.0 и 4.0 не являются чем-то особенным и ведут себя как любые другие переменные, — когда вы передаёте $joanne и $joe в wed(), на самом деле вы передаёте не их. Вместо этого, вы передаёте их точные копии, дубликаты. Таким образом, хотя их копии и женятся в wed(), действительные $joe и $joanne остаются на безопасном расстоянии от таинства священного брака, в своей защищённой внешней области видимости.
Конечно, PHP 3 и 4 дают вам возможность принудительно передать переменные по ссылке, позволяя, таким образом, функциям изменять аргументы, переданные им из внешней области видимости. Если бы мы определили прототип wed() так:
<?php
function wed(&$bride, &$groom)
?>
то для Joanne и Joe всё сложилось бы более удачно (или менее, в зависимости от вашего на то взгляда).
Однако, всё намного сложнее. К примеру, что если вы хотите вернуть объект из функции по ссылке? Что если вы хотите вносить изменения в $this внутри конструктора, не беспокоясь о том, что может произойти, когда они в результате выполнения оператора new скопируются в переменную-контейнер? Не знаете, о чём я?.. Скажите "аллилуйя" { а лучше прочитайте раздел References inside the constructor из PHP Manual }.
Несмотря на то, что PHP 3 и 4 в определённой степени справлялись с этими трудностями, предоставляя синтаксические ухищрения для передачи объектов по ссылке, они никогда не брались за суть проблемы:
Объекты отличаются от остальных видов значений, следовательно,
объекты должны передаваться по ссылке, если не указано иного.
Рекомендуем скачать другие рефераты по теме: решебник по русскому, скачать решебник.
Категории:
Предыдущая страница реферата | 1 2 3 | Следующая страница реферата