ООП   PHP   web   4GL - визуальные среды

Объектно-ориентированное программирование в PHP для начинающих

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

Понятие объектно-ориентированного программирования в PHP

Вы когда-нибудь работали с PHP? Тогда вы знаете, как создавать и использовать функции в PHP. Наверняка вы знакомы с процедурным программированием в PHP. Посредством процедурного программирования обычно создаются структуры данных - номеров, строк, массивов и так далее - для хранения ваших данных, а затем эти структуры данных передаются в функции, которые работают с этими данными.

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

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

Для чего нужно объектно-ориентированное программирование в PHP?

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

Тем не менее у ООП есть ряд преимуществ:

  1. Написание модульного кода: С помощью ООП вы можете написания код в отдельных модулях. Разделяя код на отдельные модули, вы можете сделать код более управляемым, и простым в отладке и расширении.
  2. Может отражать, то что происходит в реальном мире: Как я уже говорил ранее, объекты могут легко отображаться на реальных «объектах», таких как животные, транспорт, архитектура и так далее. Благодаря этому задача упрощается, когда вы приступаете к проектированию ваших объектно-ориентированных приложений, поскольку цель каждого объекта, а также связь между объектами, и без того уже достаточно ясны.
  3. Использование кода для многократного применения: Код многократного использования поможет вам сэкономить много времени при написании приложений, и с течением времени вы можете создать библиотеку кодов многократного использования, которые вы можете использовать в различных приложениях. ООП облегчает написание кода многократного использования, поскольку структуры данных и функции красиво содержатся в одном объекте многократного использования. Также можно воспользоваться уже существующим объектом и расширить его для того, чтобы добавить новые функции для конкретного приложения, что в свою очередь облегчает повторное использование объектов.

Основополагающие понятия ООП в PHP

Прежде чем перейти к написанию объектно-ориентированного кода на PHP, важно понимать 4 основных понятия ООП: Классы, объекты, свойства и методы.

Классы

Класс - является основой для объектов. Это блок кода, который определяет:
Типы данных, которые объекты, созданные из класса, будут хранить и функции, которые эти объекты будут содержать.
При создании объектно-ориентированного приложения, вы обычно создаете один или более классов, представляющих различные типы объектов в вашем приложении. Например, если вы пишете сайт, вы можете создать классы, называемые Site, Article, Category и User.

Объекты

Объект - это специальный тип переменной, который создается из класса. Он содержит фактические данные, и вы можете вызывать объектные функции, чтобы работать с этими данными. Из одного класса вы можете создать сколько угодно объектов. Каждый объект функционирует независимо от других, даже если все они из одного и того же класса.

Для примера:

Часто говорят, что объект - это экземпляр класса, и процесс создания объекта из класса называется созданием экземпляра.

Свойства

Значения данных, которые содержит объект, хранятся в специальных переменных, известных как свойства. Свойства объекта тесно связаны с объектом. Несмотря на то, что все объекты, созданные из данного класса, имеют одни и те же свойства, свойства одного объекта могут иметь различные значения для свойств другого объекта.

Методы

Функции, которые определены в пределах класса и используются в объекте, известны как методы. Во многих отношениях, они подобны обычным функциям; им можно присваивать значения, они могут содержать локальные переменные и возвращать значения. Однако методы объекта обычно работают в основном со свойствами объекта. Например, метод signin() для входа на сайт может установить свойство SignIn для пользователя сайта в значение true.

Создание классов в PHP

Теперь, когда вы знаете, какие существуют классы, объекты, свойства и методы, самое время для того, чтобы приступить к работе и создать некоторые классы и объекты с помощью PHP кода.

Во-первых, давайте рассмотрим создание класса. Базовый синтаксис для создания класса в PHP выглядит так:


<?php

  class ИмяКласса
  {
    // (Здесь находится описание класса)
  }

?>

Например, если бы вы создали класс User на своём веб-сайте, тогда бы вы написали следующий код:


<?php

class User
{
  // (Здесь находится описание класса)
}

?>

Довольно просто не правда ли?! Конечно, этот класс ничего не может делать, до тех пор пока вы не добавите свойства и методы этого класса. Тем не менее, приведенный выше код создает настоящий класс, пригодный для использования в PHP. Хорошим тоном в ООП программировании является то, что для каждого класса нужно создавать свой собственный файл, с тем же именем, что и имя класса. Например, вы могли бы записать указанный выше код класса User в файл User.php и сохранить файл в папку classes.

Создание объектов в PHP

Вы можете создать объект класса с помощью ключевого слова new, следующим образом:


<?php

 new Имя_класса()

?>

Эта конструкция создает объект на базе класса «Имя_класса» . Обычно, чтобы хранить вновь созданный объект, нужно присвоить его переменной, которую можно использовать позже для доступа к объекту. Например, давайте создадим новый объект User и сохраним его в переменную $User:


<?php

$user = new User(); 

?>

Также мы можем создать еще один объект в этом же классе:


<?php

$user2 = new User(); 

?>

Даже если мы создали эти классы из одного и того же класса User, то эти объекты $User и $User2 абсолютно не зависят друг от друга.

Свойства класса

Теперь, когда мы знаем, как создавать классы и объекты PHP, давайте рассмотрим добавление свойств. Существует 3 типа свойств, которые можно добавить в класс:


<?php

class ИмяКласс
{
  public $ИмяСвойства;
  private $ИмяСвойства;
  protected $ИмяСвойства;
} 

?>

Добавим в класс User свойство для хранения имени пользователя:


<?php

class User
{
      public $username "";
} 

?>

Обратите внимание, что при создании свойства, мы присваиваем ему пустую строку - «» . Это означает, что, когда новое свойство объекта $username будет создано, то ему будет присвоена пустая строка. Как и в случае с обычными переменными, при создании свойств им не обязательно присваивать какие-то значения, но часто это очень хорошая идея. Если вы не присвоите свойству значие, то ему по умолчанию будет установлено значение null.

Доступ к свойствам

Чтобы получить доступ к объекту нужно использовать оператор «->», следующим образом:


<?php

 $Объект -> ИмяСвойства

?>

Попробуйте так сделать. Давайте создадим скрипт, который объявляет класс User и его свойства, создает новые объекты User, а затем устанавливает и считывает свойство username:


<?php

class User
{
  public $username "";
}
 
$User = new User();
$User->username "Петя";
echo $User->username; // Выводит "Петя"
 
?>

Если вы запустите указанный выше код, то в результате будет выведена строка "Петя", которая является значением свойства $User->username. Как можно заметить, свойство объекта используется обычная переменная. Можно прочитать его значение и присвоить ему новое.

Методы класса

Что можно сказать о добавлении методов класса? Как уже упоминалось ранее, методы это обычные функции, которые являются частью класса. Поэтому нет ничего удивительного в том, что можно создавать методы, как любые другие функции с помощью ключевого слова function. Единственное различие заключается в том, что вам следует также добавлять ключевые слова public, private или protected перед объявлением метода, также как в случае свойств:


<?php

 class ИмяКласса
{
  public function ИмяМетода() {
    // (Запишите код вашего метода здесь)
  }

  private function ИмяМетода() {
    // (Запишите код вашего метода здесь)
  }

  protected function ИмяМетода() {
    // (Запишите код вашего метода здесь)
  }
}

?>

Как и в случае со свойствами, методы с ключевым словом public могут быть использованы в любом месте. Методы с ключевым словом private могут вызываться только с помощью других методов внутри класса. И методы с ключевым словом protected могут быть вызваны методами внутри класса и в любых производных классах, то есть те, которые являются потомками родительского класса.

Добавим некоторые методы для нашего класса User:

Вот наш код:


<?php

class User
{
  public $username "";
  private $SignIn false;
 
  public function signin() {
    $this->SignIn true;
  }
 
  public function signout() {
    $this->SignIn false;
  }
 
  public function isSignIn() {
    return $this->SignIn;
  }
}

?>


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

Например, метод signin() имеет доступ к свойству $SignIn этого же объекта, используя конструкцию $this->SignIn.

Кстати, свойство $SignIn является недоступным (private), поэтому доступ к нему осуществляется только через методы signin(), signout() и isSignIn(). Это хороший подход, поскольку он сохраняет внутреннюю информацию об объекте. Он запрещает доступ во внешнем коде к тому, как происходит запись входа или выхода пользователя на сайт. Использование недоступных (private) свойств, там где это возможно, позволяет сохранить объекты самостоятельными, переносимыми и безопасными.

Свойство $username сделано доступным (public) главным образом для того, чтобы показать, как это работает. В реальных условиях вы, возможно, захотите сделать $username недоступным и добавите доступные (public) методы для чтения и записи имени пользователя, если это необходимо в вашем случае.

Примеры работы с методами в ООП

Для вызова объекта, нужно использовать оператор "->":


<?php

 $Объект -> Имя_Метода()

?>

Этот код работает как обычный вызов функции. Вы можете передавать аргументы в круглых скобках (при условии, что метод может принимать аргументы). Кроме того метод может возвращать значения, которые вы можете использовать по своему усмотрению. Теперь добавим некоторые методы в наш класс User и попробуем использовать их:


<?php

class User
{
  public $username "";
  private $SignIn false;
 
  public function signin() {
    $this->SignIn true;
  }
 
  public function signout() {
    $this->SignIn false;
  }
 
  public function isSignIn() {
    return $this->SignIn;
  }
}
 
$User = new User();
$User->username "Петя";
echo $User->username " " . 
( $User->isSignIn() ? "вошел в систему" :  "вышел из системы" ) .  "<br>";
$User->signin();
echo $User->username " " . 
( $User->isSignIn() ? "вошел в систему" :  "вышел из системы" ) .  "<br>";
$User->signout();
echo $User->username " " . 
( $User->isSignIn() ? "вошел в систему" :  "вышел из системы" ) .  "<br>"?>

Указанные выше скрипт отображает следующее:


Петя вышел из системы

Петя вошел в систему

Петя вышел из системы

Вот как работает скрипт:

ООП   PHP   web   4GL - визуальные среды

Знаете ли Вы, что релятивизм (СТО и ОТО) не является истинной наукой? - Истинная наука обязательно опирается на причинность и законы природы, данные нам в физических явлениях (фактах). В отличие от этого СТО и ОТО построены на аксиоматических постулатах, то есть принципиально недоказуемых догматах, в которые обязаны верить последователи этих учений. То есть релятивизм есть форма религии, культа, раздуваемого политической машиной мифического авторитета Эйнштейна и верных его последователей, возводимых в ранг святых от релятивистской физики. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 07.07.2020 - 04:30: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> ПРОБЛЕМА КРИМИНАЛИЗАЦИИ ЭКОНОМИКИ - Карим_Хайдаров.
07.07.2020 - 04:24: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Владимира Николаевича Боглаева - Карим_Хайдаров.
07.07.2020 - 04:00: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Андрея Маклакова - Карим_Хайдаров.
06.07.2020 - 14:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Михаила Делягина - Карим_Хайдаров.
06.07.2020 - 11:47: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
06.07.2020 - 08:46: СОВЕСТЬ - Conscience -> РУССКИЙ МИР - Карим_Хайдаров.
06.07.2020 - 04:18: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
06.07.2020 - 04:14: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
05.07.2020 - 18:02: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРОБЛЕМЫ КОНСПИРОЛОГИИ - ГЕРМЕТИЗАЦИИ ЗНАНИЙ - Карим_Хайдаров.
05.07.2020 - 18:01: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Проблема народного образования - Карим_Хайдаров.
05.07.2020 - 17:52: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Игоря Стрелкова - Карим_Хайдаров.
05.07.2020 - 12:30: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution