6.2. Объектная модель PHP 5
PHP 5 использует перезагружаемую модель объектов с односторонним наследованием и ограничением доступа. Наследование включает взаимосвязь между классами типа "родитель-потомок". (Концепция наследования будет обсуждаться позднее в этой главе.) Если в других языках разрешено использование нескольких классов, то в PHP допускается только по одному "родителю". Кроме того, PHP поддерживает ограничение доступа к свойствам и методам. Элементы можно объявить "частными", тем самым запретив доступ к классу извне. И наконец, PHP позволяет порожденным классам перезагружать элементы порождающих их классов.
Объектная модель в PHP 5 рассматривает объекты отдельно от любого другого типа значения, которое имеется в PHP, и реализует неявное поведение типа "переход по ссылке", т.е. PHP не требует от вас явной передачи или возвращения объектов по ссылке. Объяснение перехода на объектную модель, опирающуюся на дескрипторы, детально обсуждается в конце настоящей главы. Это одна из самых важных новых возможностей PHP 5.
Кроме обеспечения более интуитивной объектной модели, всякая система, опирающаяся в своей работе на дескрипторы, имеет дополнительные преимущества: повышенную производительность, снижение потребления памяти и возросшую гибкость.
В предыдущих версиях PHP сценарии копируют объекты по умолчанию. Если такая возможность не нарушает логику вашего проекта, то PHP значительно упростит перенос больших объемов данных. Сейчас PHP перемещает только дескриптор, что требует значительно меньше времени и увеличивает производительность конкретного сценария, так как позволяет не прибегать к ненужному копированию. Преимущество производительности возрастает параллельно со сложностью иерархии объектов. Чем меньше копий, тем меньше для них требуется памяти. Это может привести к возрастанию производительности системы в целом, поскольку больше памяти остается в распоряжении всех остальных процессов.
Процессор Zend Engine 2 обладает еще большей гибкостью. В результате новой разработки появились деструкторы, методы классов, которые срабатывают непосредственно перед разрушением объекта. Это также дает преимущества с точки зрения использования памяти, так как PHP теперь точно "знает", когда не осталось ссылок на объект, позволяя ему освободить память для других целей.
6.3. Определение класса
Определяя класс, вы на самом деле создаете шаблон для создания объектов. В нем дается перечень всех переменных, которые будет иметь данный объект, и все функции, которые потребуются ему для работы. Они называются свойствами и методами соответственно. На рис. 6.1 показана форма определения классов. Заметим, что внутри фигурных скобок можно объявлять только переменные или функции. В листинге 6.1 показано объявление класса с тремя свойствами и двумя методами.
Классы и объекты
I Листинг 6.1. Объявление класса_
<?php
//Определить класс для отслеживания активности пользователей
class User
{
//свойства public $name;
private $password, $lastLogin; //методы
public function _construct($name, $password)
{
$this->name = $name; $this->password = $password; $this->lastLogin = time(); $this->accesses++;
}
// получить дату последнего входа в систему function getLastLogin()
{
return(date("M d Y", $this->lastLogin));
}
}
//создать экземпляр
$user = new User("Leon", "sdf123");
// получить дату последнего входа в систему
print($user->getLastLogin() ."<br>n");
// распечатать имя пользователя
print("$user->name<br>n");
?>