-->
   
-->

Главная

ТАРИФЫ ХОСТИНГА
АРЕНДА СЕРВЕРОВ
КЛИЕНТАМ
ТЕХ. ПОДДЕРЖКА
РЕССЕЛЕРАМ
ПРОГРАММЫ И УСЛУГИ
ИНФОРМАЦИЯ
О КОМПАНИИ

  

Объекты в PHP

 

Опубликовано:
07.10.05

Объекты в PHP


PHP, как и любой уважающий себя современный язык, имеет поддержку объектно-ориентированного программирования. Я должен сразу предупредить вас, что материал, изложенный в этом разделе, будет полезен только людям, знакомым с ООП, всем остальным я настоятельно рекомендую предварительно почитать какую-нибудь хорошую документацию об основах ООП.

Объекты в PHP описываются следующим образом:

class className                 // Определение объекта className
{
        var $property;      // Определение переменной объекта

        function className()      // Функция, описанная внутри объекта и имеющая то же имя, что и имя
        {                           // объекта, является конструктором этого объекта (по аналогии с C++)
                $this->property = 0; // Переменная $this внутри методов объекта ссылается на сам объект
        };

        function setProperty($property)         // Определение метода объекта
        {
                $this->property = $property; // Обратите внимание, property в
                                                // левой  части выражения - это
                                                // переменная объекта (доступ через
                                                // $this), а в правой части - аргумент
                                                // функции с тем же именем, что
                                                // и переменная объекта.
        };
};

Как и функции, объекты должны иметь уникальное имя. Однако в отличие от функций объявление объекта еще не дает возможности работать с ним. Для того, чтобы работать с объектом, необходимо создать экземпляр этого объекта (instance). Это делается также, как и во многих других языках:

// Описание объекта Man
class Man
{
        var $firstName;
        var $lastName;
        var $age;


        function Man($fName,$lName,$age)
        {
                $this->firstName = $fName;
                $this->lastName = $lName;
                $this->age = $age;
        };

        function getName()
        {
                return($this->firstName." ".$this->lastName);
        };

        function setAge($newAge)
        {
                $this->age = $newAge;
        };
};

// Создание экземпляра объекта
$john = new Man('John','Smith',23);             // Здесь мы передаем параметры непосредственно
                                                // в конструктор объекта

Теперь переменная $john содержит экземпляр объекта Man. К слову сказать, хотя в PHP можно задавать конструкторы объектов, поддержки деструкторов для объектов до сих пор нет. Неясно, чем вызвано подобное ограничение, но это факт.

После того, как переменной присвоен созданный экземпляр объекта - с этой переменной можно делать все , что можно делать с этим объектом:

echo "Hello, my name is ".$john->getName();
echo "I'm ".$john->age." years old";

Кстати, я думаю, вы уже заметили, что имена переменных, являющихся переменными объектов, записываются без символа $ перед ними? Это происходит потому, что PHP рассматривает связку "(переменная-объект)->(переменная объекта)" как одну переменную. Зато это позволит вам очень элегантно делать например вот такие вещи:

$methodName = 'getName';
echo "My name is ".$john->$methodName;
Здорово, не правда ли? :-)

Но объекты как таковые не были бы так интересны, если бы существовали сами по себе. Однако это не так и самым интересным, нужным и полезным свойством объектов является их наследование. Посмотрим, как это выглядит на примере уже описанного выше объекта Man:

// Описание объекта Worker, наследованного от объекта Man
class Worker extends Man
{
        var $profession;
        var $salary = 500;     // Заметьте, переменные объектов могут быть
                               // инициализированы каким-то значением
                               // уже на этапе их описания. Однако это
                               // значение может быть только константой
                               // (не переменной!)

        function Worker($fName,$lName,$age,$profession='engineer',$salary=500)
        {

// PHP не вызывает конструктор родительского объекта автоматически,
// поэтому вам необходимо делать это самим
                $this->Man($fName,$lName,$age);
                $this->profession = $profession;
                $this->salary = $salary;
        };
};

// Создаем экземпляр объекта Worker
$worker = new Worker('Jack','Robertson',29,'programmer');

// Только что созданный экземпляр объекта Worker унаследовал все переменные и методы объекта Man
echo "Hello, I'm ".$worker->getName();
Переменные и методы можно не только добавлять, но и переопределять методы родительского объекта:

// Создадим новый вариант объекта Worker, переопределив метод getName()
class Worker extends Man
{
        var $profession;
        var $salary;           

        function getName()
        {
                return(parent::getName().", ".$this->profession);
        };
};

// Создаем экземпляр объекта Worker и попытаемся получить его имя:
$worker = new Worker('Jack','Robertson',29,'programmer');
echo $worker->getName();
Результатом работы предыдущего примерв будет строка: "Jack Robertson, programmer". Вы заметили использование нового оператора :: ? Этот оператор позволяет вызывать из метода объекта метод одного из родительских объектов, даже если тот уже переопределен при более "поздних" наследованиях. Использование ключевого слова parent в этом выражении позволяет вызвать метод непосредственного предка этого объекта. Однако в более сложных случаях, когда степень наследования объектов выше - можно использовать непосредственно имя объекта, метод которого необходимо вызвать. В нашем случае можно было бы написать: Man::getName().

 


Версия для печати

Назад

Проверить домен

ru  com net

Новости компании

02.04.10
Технические работы на сервере!

В пятницу 3-го апреля 2009 г. возможен кратковременный перерыв в работе сервера с 17 до 18 часов в связи с проводимыми техническими работами. ...


08.09.08
ВНИМАНИЕ!!! Пользователям сервера PRO-HOSTING!

В связи с технической необходимостью, мы вынуждены перевезти оборудование из датацентра СТЕК в новый, более современный и удобный датацентр на Остаповском проезде. Переезд оборудования будет осуществл...


15.04.08
Новая рекламная акция нашей компании.

Вас не устраивает Ваш хостинг провайдер, но деньги оплачены и жалко их терять. Мы готовы предоставить Вам альтернативу. Выбрав нас, Вы получаете возможность перехода от своего старого хостинг провайд...


01.02.08
Специальная акция "Автоматизируй свой сайт"

Скидка 30% на покупку системы управления сайтом SSPRO. Установка системы управления производится бесплатно. Подробнее о системе управления сайтом смотрите на странице: Система управления сайтом ...


20.12.07
С новым 2008-м годом

Поздравляем всех клиентов и посетителей сайта с новым 2008 годом, желаем успехов в новом году, здоровья и счастья. Коллектив ООО " ССПРО ХОСТИНГ"  ...


06.02.07
Профилактические работы на сервере

Уведомляем Вас о том, что 06/02/2007 на сервере ONLINEHOST.RU администраторами датацентра "STACK" запланировано отключение электропитания, связанное с профилактическими работами на монтажной стойке. Н...



Ваш проект:


Коммерческий
Коммерческий
Коммерческий


2002-2009 (с) ООО "ССПРО Хостинг"
+7 495 77-88-33-9  Карта сайта,
Разработка сайта Cве-Арт | Cms Sspro