Что такое ООП и с чем его едят (Основы) [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 ооп чем едят

Внимание!

Ознакомьтесь со статьёй по ссылке ниже.

Сайт мошенников
Статистика
File engine/modules/zpstats.php not found.
Обновления new
Информация