» » Что такое ООП и с чем его едят (Основы) [PHP]

Что такое ООП и с чем его едят (Основы) [PHP]

Привет всем, хотел открыть новую рубрику на сайте, она же статьи/уроки, тем самым помочь новичкам быстрее освоить веб-разработку, публиковать буду в блоге. Сегодня бы я хотел поговорить о не малоизвестном языке программирования PHP (Hypertext Preprocessor {wikipedia} ). Эта статья не рассчитана на совсем новичков, скорее рассчитана на тех, кто хоть чуть знаком с PHP. До сих пор замечаю что многие разработчики (DLE в частности) использую старый подход кодинга, он же - процедурный, при этом не используют, те вещи, которые облегчают и ускоряют разработку. Сегодня будем говорить о не мало известном ООП (Объектно-ориентированное программирование {wikipedia}), если вкратце, то этот стиль программирования построен на классах, содержащие в себе методы (они функции по старинке). Чем удобен ООП? А тем что, вы раз пишете нужную функцию и при правильном подходе, можете использовать её в любом месте вашего приложения. Давай те рассмотрим строение простейшего класса. Конечно со всеми "плюшками" в одной статье я вас не познакомлю, но основы донести попробую.

//сам класс
class One {
 //code ...
}

Объявляем наш класс в переменную $app, в дальнейшем через данную переменную можно обращаться к "открытым" (об этом позже) методам нашего класса.
$app = new One(); 

Если класс не содержит методов для вызова из вне, то можно объявить так
new One();

Бывают еще методы статические, если своими словами, это методы к которым можно обратится на прямую, примерно так

Наш класс
class One {
//Обратите внимание, что у нас имеется оператор static
	public static function callme() {
		echo 'Hello World';
	}
}

Теперь наш метод можно вызвать таким вот образом:
One::callme(); //(Вернет Hello World)

Или можно сразу передать ему наши параметры, допустим имеем такой код

Наш класс
class One {
	//Как видите мы добавили переменную $param и отдаем ее в методе
	public static function callme($param) {
		echo $param . 'Мир!';
	}
}

Теперь наш метод можно вызвать таким вот образом:
One::callme('Привет'); //(Вернет Привет Мир!)

С обычными методами можно делать примерно тоже самое,

Наш класс
class One {
//static убираем
	public function callme() {
		echo 'Hello World';
	}
}

Обращаемся таким способом
$app = new One();
$app->callme(); //(Вернет Hello World)

Тоже самое, но с передачей параметров методу

Наш класс
class One {
//Как видите мы добавили переменную $param и отдаем ее в методе
	public function callme($param) {
		echo $param . 'Мир!';
	}
}

Обращаемся таким способом
$app = new One();
$app->callme('Привет'); //(Вернет Привет Мир!)

Думаю тут понятно, поехали дальше, давайте посмотрим когда класс вызывается не занося его в переменную, то есть так:
new One();

тут уже к нам на помощь приходят магические методы, их много:
__constuct()
__set()
__get()
__clone

и тд, сегодня будет говорить только __constuct(), если своими словами, то это те методы, которые не требуют вызова, они это делают автоматически, давайте рассмотрим как использовать

Имеем такой класс
class One {
//Как видите, у нас имеется магический метод, он же конструктор класса
	public function __construct() {
		echo 'Hello World';
	}
}

Теперь если мы объявим наш класс
new One(); // Нам вернет Hello World

В конструктор, как и в обычное методы, так можно передавать параметры, передача параметров в принципе ничем не отличается, от того, как мы их передавали в обычные методы, то есть все тоже самое
class One {
	//Добавили в наш метод параметр-переменную $param
	public function __construct($param) {
		echo $param . 'Мир!';
	}
}

Объявляем класс и прям ему передаем параметры, эти параметры примет наш конструктор и вернет полученные данные
new One('Привет'); // Нам вернет Примет

Как видите, ничего сложно нет, поехали дальше, сейчас поговорим, про права доступа к методам, вкратце, вы можете запретить вызов какого-либо метода вне класса, их 3, а именно:
- public - общедоступный, можно вызвать в любой точке вне класса.
- private - приватный, можно вызывать только в наследуемых (об этом позже) классах
- protected - закрытый методом, можно вызвать только внутри своего класса

PS: Данные права доступа не зависят от типа метода, то ли это обычный, то ли статический метод

теперь как использовать
Опять же имеем наш класс
class One {
		//__METHOD__ это предопределенная константа в php, она содержит в себе текущий класс и метод
	public function PublicAccess() {
		echo __METHOD__;	
	}
	
	private function PrivateAccess() {
		echo __METHOD__;	
	}
	
	protected function ProtectedAccess() {
		echo __METHOD__;	
	}
}

теперь что мы получим, в данном примере мы сможем вызвать только public метод
то есть по старинке
$app = new One();
$app->PublicAccess(); //Вернет One::PublicAccess

если вызывать
$app->PrivateAccess(); 

или
$app->ProtectedAccess();

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

Теперь о наследовании классов и использовании приватных(private) методов
Наш класс
class One {
	public function PublicAccess() {
		echo __METHOD__;	
	}
	
	private function PrivateAccess() {
		echo __METHOD__;	
	}
	
	protected function ProtectedAccess() {
		echo __METHOD__;	
	}
}

Наш второй класс
class Two extends One{
	//Именно с помощью "extends One" мы наследовали наш первый класс и может использовать его открытые или приватные методы, protected - закрыты, получим ошибку при попытке вызвать

	//Использум так, 
	public function extOne() {
		echo $this->publicAccess();
	}
}

Объявляем класс и вызываем наш метод
$app = new Two();
$app->extOne(); // Получим One::PublicAccess

в кратце, мы во втором классе получили данные из первого и отобразили их
В статических методах, private методах и тд, все так же, как и я писал раньше
Так так же можно "спарить" методы обеих классом, и так наши классы
class One {
	//Для примера используем магический метод _construct
	public function __construct() {
		echo 'Привет';
	}
}

Второй класс
class Two extends One {
	//Тут используем обычный метод, но можно использовать так же конструктор
	public function extOne() {
		parent::__construct();
	}
}

вызываем
$app = new Two();
$app->extOne(); //Получаем - Привет

Со статическими методами, передачей параметров, правах доступа, все тоже самое, что я писал выше
Сейчас еще расскажу о переменных, и пожалуй на сегодня хватит, статья уже довольно большая.
поехали, и так имеем наш класс
class One {
	//Объявляем нашу переменную
	//Переменные так же могу иметь права доступа, могут быть обычными или статическими, могут быть вызваны из вне класса или быть наследоваными в других классах
	public $normal = 'Обычная переменная'; // Общедоступная, обычная переменная
	public static $statics = 'Статическая переменная'; // Общедоступная, статическая переменная
	
	//Для примера используем магический метод _construct
	public function __construct() {
		//используем так
		//для обычных переменных
		echo $this->normal; //Вернет "Обычная переменная"
		//что такое $this? 
		//$this - это псевдо переменная, которая используется и доступна внутри нашего класса
		//для вызова внутри класса статических методов и переменных используется оператор self, пример:
		echo self::$statics; //Вернет "Статическая переменная"
		//Для методов тоже самое
		self::myMethod();
	}
}


Теперь о вызове из вне класса
для обычных переменных
$app = new One();
$app->normal; //Вернет "Обычная переменная"

для статических переменных
One::$statics; //Вернет "Статическая переменная"

Наследование
class One {
	public $normal = 'Обычная переменная'; // Общедоступная, обычная переменная
	public static $statics = 'Статическая переменная'; // Общедоступная, статическая переменная
}

Второй класс
class Two extends One {
	//Тут используем обычный метод, но можно использовать так же конструктор
	public function __construct() {
		echo $this->normal; //Вернет "Обычная переменная"
		echo self::$statics; //Вернет "Статическая переменная"
	}
}
new Two();

На этом, на сегодня пожалуй все, конечно это только "верха" ООП подхода, но надеюсь мне удалось вам объяснить что такое ООП, и с чем его едят.
Всем спасибо, надеюсь кому-то статья будет полезна!
PHP


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

Комментарии

4

Gameer

Местные 9 мая 2014 13:06
Ну тут мало кто поймет это, а статья нормальная. Как раз показывает что это и для чего!
Влюблённая Офелия плыла себе вдаль
Сияла ночь, звенела земля.
4

Shnapik

Посетители 9 мая 2014 17:23
Честно сказать если и изучать php, то полностью и с самых низов. А статья ничего так, кому-то может и пригодится.
4

Ashot

Посетители 11 мая 2014 12:55
Сегодня как раз читал статью на хабре, и почему большие компании как VK, не используют ООП. Статья будет интересна тем, кто немного разбриается в php. Автор молодец, побольше такой информации.
4

TaCaPxaa

Посетители 12 мая 2014 16:10
thank you Rave love

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.