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;
}
}