Что такое ООП и с чем его едят (Основы) [PHP]
Robot 2014.05.09 Блог 1924Зафиксирван
Привет всем, хотел открыть новую рубрику на сайте, она же статьи/уроки, тем самым помочь новичкам быстрее освоить веб-разработку, публиковать буду в блоге. Сегодня бы я хотел поговорить о не малоизвестном языке программирования 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();
На этом, на сегодня пожалуй все, конечно это только "верха" ООП подхода, но надеюсь мне удалось вам объяснить что такое ООП, и с чем его едят.
Всем спасибо, надеюсь кому-то статья будет полезна!
Другие новости по теме:
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.