Объекты в вызовы ВСЕГДА передаются по ссылке. Также присваивание объекта выполняется по ссылке. Если требуется создать копию объекта, то для этого используется конструкция clone.
Пример (пользуемся ранее определенными классами):
<?php // создаем объект $obj1 = new Fio_Class();
// вызываем метод для объекта $obj1->set_name( "Иван", "Иваныч", "Иванов" ); $obj2 = $obj1;
// меняем значения свойств $obj2->set_name( "Петр", "Петрович", "Петров" );
if( $obj1->family == $obj2->family ) { echo "Оказалось, что значение свойства изменилось в обоих объектах:<br />"; echo $obj2->family."<br>"; }
$obj2 = clone $obj1;
// меняем значения свойств $obj2->set_name( "Иван", "Иваныч", "Иванов" );
if( $obj1->family != $obj2->family ) { echo "Оказалось, что значение свойства изменилось только в одном объекте:<br />"; echo $obj2->family."<br>"; } ?>
Наследование
Пример наследования
В PHP не разрешено множественное наследование. Для задания класса родителя (базового класса) используется ключевое слово extends. Внутри класса свойства и методы родителя доступны через $this-> (для методов это верно только в случае, если они не перегружены). Для явного доступа к методу родителя используется конструкция parent::, а для доступа к любому классу в вышестоящей иерархии:
<Имя класса>::.
Пример (пользуемся ранее определенными классами):
<?php class Employer_Class extends Fio_Class { public $department;
function set_name2($par1, $par2, $par3, $par4 ) { // можно вызвать метод родителя так (в первую очередь будем // искать метод с такой сигнатурой в исходном классе, // а только потом в родителе)