PHP классы
Общее
В эру объектно ориентированного подхода к созданию ПО выживают языки программирования с поддержкой ОО. В PHP она реализована хоть и не вполне удачно (версия 4.0) но достаточно для большей части жизненных случаев. Похоже это на java. В 4-ой версии не хватает деструкторов (они появились в PHP5).
Вообще PHP5 имеет более богатые возможности: унифицированные конструкторы __construct(), деструкторы __destruct(), private и protected переменные и методы, абстрактные классы и методы abstract, интерфейсы и многое другое
Пример:
Объявление класса в PHP4
class Processor{
var $description;
function Processor(){
$this->description = "Processor class";
}
function Do(){
echo $this->description;
}
}
Объявление класса в PHP5
class Processor{
private $description;
function __construct(){
$this->description = "Processor class";
}
function Do(){
echo $this->description;
}
}
Использование
$proc = new Processor;$proc->Do();
Деструкторы
Чтобы использовать какую-либо функцию как деструктор класса в PHP4 есть функция register_shutdown_function. В PHP5 уже есть __destruct()
Пример:
Объявление в PHP4
class Processor{
var $description;
function Processor(){
$this->description = "Processor class";
register_shutdown_function(array(&$this, \'ProcessorDestructor\'));
}
function Do(){
echo $this->description;
}
function ProcessorDestructor(){
//do something
}
}
Объявление в PHP5
class Processor{
var $description;
function __consturct(){
$this->description = "Processor class";
}
function Do(){
echo $this->description;
}
function __destruct(){
//do something
}
}
Использование
$proc =& new Object;
Замечание& - надо использовать чтобы переменная $proc содержала не копию объекта а ссылку на него. Иначе деструктор будет работать не правильно.
Наследование
Куда же без него. Реализовано в PHP4 просто и без затей. Множественное наследие не поддерживается. Для наслдедования есть ключевое слово extends для обращения к методам и переменным родителя parent
Пример:
class XMLProcessor extends Processor{
var $description;
function XMLProcessor()
{
$this->description = "XML Processor class";
}
function Do()
{
echo parent::description;
echo $this->description;
}
}