Три загадочные буквы – ООП

1.72K
.
Здравствуйте, уважаемые пользователи JohnCMS. Я не ошибусь, если скажу, что большинство из вас, примерно 90%, знают что такое HTML и как он работает. Около 70% в той или иной степени знают PHP. Многие слышали об объектно-ориентированном программировании, но что это и с чем его едят знают, к сожалению, далеко на все. А зря! Эта статья призвана помочь вам понять принципы ООП, разобраться, что такое классы, методы и свойства и перейти на более высокую ступень своего развития как PHP-программиста. Начнём!
В ООП нет ничего сложного. Фактически это отражение нашего мира. Например: есть объект Вася Пупкин, он относится к классу Человек, имеет некоторые свойства: рост – 180 см, вес – 85 кг, цвет глаз – зелёный; может выполнять различные действия: ходить, сидеть, ковырять в носу и т.д. Так же и в нашей программе (скрипте) мы можем создать объект определённого класса, назначить ему свойства и производить с ним различные действия. То есть класс – это тип, который мы описываем один раз. Объект – это переменная этого типа. Объектов можно создать сколько угодно. Поле класса (свойство) – переменная, для значения свойства объекта. Метод – любая функция созданная нами и описанная внутри класса. То есть это действие, которое может выполнить объект.
В PHP описание объекта начинается служебным словом class, далее следует название класса:
class Chelovek {}

Внутри фигурных скобок перечисляются свойства и методы класса. Перед свойством должно стоять служебное слово var:
class Chelovek {
	// Свойства
	var $rost;
	var $ves;
	var $cvet_glaz;
	// Методы
	function __construct () {...}	// Коструктор класса, о нём далее...
	function Hodit () {...}	
	function Sidet () {...}	
}

Создание нового объекта:
$Vasya_Pupkin = new Chelovek();

Где new –служебное слово, Chelovek – название класса.
Поздравляю вас товарищи с рождением нового человека Васи Пупкина! ))
Теперь давайте определим какой же он этот Вася.
$Vasya_Pupkin->rost = 50; // Пока что Васечка маленький, но он обязательно будет большим и сильным ))
$Vasya_Pupkin->ves = 4; // Да, наш Вася богатырь!
$Vasya_Pupkin->cvet_glaz = 'зелёный';

Надеюсь синтаксис здесь всем понятен. Идём дальше.
Стоп! Как дальше? Нет, так не бывает! Не может сначала родиться непонятно что, а затем обрести форму и цвет глаз. Что это врачи его что ли растянули, накачали и в добавок глаза покрасили? Вася уже при рождении должен иметь определённые свойства. Тут нам на помощь придёт конструктор.
Конструктор – это функция, которая выполняется при создании объекта.
class Chelovek {
	var $rost;
	var $ves;
	var $cvet_glaz;

	function __construct ($r, $v, $c) {
	$this->rost = $r;
	$this->ves = $v;
	$this->cvet_glaz = $c;
	}	
	function Hodit () {...}	
	function Sidet () {...}	
}
$Vasya_Pupkin = new Chelovek(50, 4, 'зелёный');

Обратите внимание на переменную $this. С её помощью мы обращаемся к свойствам объекта внутри методов класса. Помните об этом!
На самом деле не обязательно при создании объекта всем его свойствам присваивать определённые значения. Можно отложить это до нужного момента и воспользоваться кодом:
$Vasya_Pupkin->rost = 180;

Пришло время поговорить о методах. Что делать, если нам необходимо неоднократно выводить на экран всю информацию о нашем Васе? Писать каждый раз
echo $Vasya_Pupkin->rost;
echo $Vasya_Pupkin->ves;
echo $Vasya_Pupkin->cvet_glaz;

надоест. А если у нас будет не три свойства, а сто?! Давайте облегчим себе задачу и опишем метод Info:
class Chelovek {
	var $rost;
	var $ves;
	var $cvet_glaz;

	function __construct ($r, $v, $c) {
	$this->rost = $r;
	$this->ves = $v;
	$this->cvet_glaz = $c;
	}	
	function Hodit () {...}	
	function Sidet () {...}
	
	function Info () {
	echo $Vasya_Pupkin->rost;
	echo $Vasya_Pupkin->ves;
	echo $Vasya_Pupkin->cvet_glaz;
	}
}

$Vasya_Pupkin = new Chelovek(50, 4, 'зелёный');

$Vasya_Pupkin->Info();

Теперь в любом месте программы пишем $Vasya_Pupkin->Info; и мы в шоколаде ;)

Вот и всё! Ничего сложного, правда? Конечно же это только самые основы. В этой статья я не затронул всех прелестей ООП, таких как наследование и полиморфизм. О них речь пойдёт в следующих статьях, если конечно за эту вы меня в комментариях тухлыми яйцами не закидаете ))
Exit;

P.S.: в описании класса намеренно сделана ошибка. Если Вы внимательно прочитали статью, то без труда должны её найти. Кто первый найдёт, тому печенька ))
.
В стельку трезвый
var - пых 4 версии.
В пятой private или public
Так же и с методами
.
Максим, в 5-ом var эквивалентно public.
Прост public, private, protected это отдельная тема, я не стал смешивать
.
Максим (06.11.2010/23:07)
var - пых 4 версии.
В пятой private или public
Так же и с методами
Не буду спорить.
Можно использовать как var, так и public (по свойству одно и тоже).
Var c 4ой версии, public появилась в 5ой.
В 6ой public будет убран, останется var.
.
Николай
Дионис, очень очень плохая статья, не зачет (
Рановато ты решил обучать других что такое о-о-п пэхапэ, сам пропитайся конкретно этим стилем, можт тада и начудишь что то более. Что то более..
.
Николай (06.11.2010/23:13)
В 6ой public будет убран, останется var.
Зря, надо бы наоборот. Пойду писать пых-разрабам ))
.
В стельку трезвый
Dionis (06.11.2010/23:11)
Прост public, private, protected это отдельная тема, я не стал смешивать
Лучше учесть это сразу, ибо пхп4 тут мало кто изучал и лучше начать с пятого.
.
Николай (06.11.2010/23:15)
Дионис, очень очень плохая статья, не зачет (
Рановато ты решил обучать других что такое о-о-п пэхапэ, сам пропитайся конкретно этим стилем, можт тада и начудишь что то более. Что то более..
Прошу указать конкретные ошибки
.
Максим (06.11.2010/23:19)
Лучше учесть это сразу, ибо пхп4 тут мало кто изучал и лучше начать с пятого.
Дык var и в 5-работает. К тому же вон Николай говорит, что в 6-ом ток var останется. Так что всё правильно
.
В стельку трезвый
Dionis (06.11.2010/23:21)
Дык var и в 5-работает. К тому же вон Николай говорит, что в 6-ом ток var останется. Так что всё правильно
Работать то работает. Николай много чего говорит. гг. он говорил что мы все умрём вчера. гг. я пока живой.
У разработчиков пыха есть такая хорошая манера, они добавляют что-то новое, но от старого не отказуются в следующей версии, но потом они всё же уничтожают старое. ))
Всего: 52