<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

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

Класс состоит из следующих частей:

  1. Свойства.
  2. Конструктор.
  3. Методы.

Но прежде, чем добавлять все эти части давайте создадим описание класса (пусть файл называется "myclass.php"):

<?php
  class MyClass {

  }
?>

Здесь мы создали пустой класс с именем "MyClass". Теперь добавим в наш класс свойства для нашего будущего объекта:

<?php
  class MyClass {
    public $x;
    public $y;
    const pi = 3.1415926;
  }
?>

Здесь мы создали три свойства (кстати, свойства иногда ещё называют полями). Обратите внимание, что они доступны за пределами класса (модификатор доступа - "public"). Если бы вместо "public" был бы "private", то они были бы доступны только внутри самого класса, а если "protected", то в самом классе и в наследниках (дочерних классах). Впрочем, более подробно, мы поговорим о них в следующих статьях.

Также мы добавили одну константу. И обратите внимание, что перед именем константы нет знака "$", то есть это не переменная, и этот знак ставить не надо.

Теперь создадим конструктор.

<?php
  class MyClass {
    public $x;
    public $y;
    const pi = 3.1415926;
    public function __construct($x, $y) {
      $this->x = $x;
      $this->y = $y;
      echo "Был создан объект с параметрами: $x и $y";
    }
  }
?>

Конструктор в PHP - это функция __construct(). Этой функции мы можем передавать параметры, которые затем каким-либо образом использовать. В данном случае, мы получили параметры из конструктора и записали их в свойства класса. Обратите внимание, что обращение к свойствам класса надо обращаться через $this->имя_ свойства. Также мы вывели строку просто для того, чтобы Вы понимали, что в конструкторе Вы можете делать всё, что пожелаете (как в обычной функции).

Теперь перейдём к последнему пункту созданию класса - это добавление методов. Добавим метод, который считает и возвращает сумму свойств x и y, а также метод, возвращающий константу pi:

<?php
  class MyClass {
    public $x;
    public $y;
    const pi = 3.1415926;
    public function __construct($x, $y) {
      $this->x = $x;
      $this->y = $y;
      echo "Был создан объект с параметрами: $x и $y";
    }
    function sum() {
      $sum = $this->x + $this->y;
      return $sum;
    }
    function getPI() {
      return self::pi;
    }
  }
?>

Здесь всё очень просто: создаём переменную, в которую записываем сумму двух свойств: x и y. Потом возвращаем результат. Второй метод возвращает константу. Обратите внимание, что мы обращаемся с помощью такой конструкции: "self::имя_константы". Так обращаются к константе внутри класса.

А теперь главный вопрос: "Как использовать данный класс в PHP?". Для этого создаём ещё один файл, в котором пишем такой код:

<?php
  require_once "myclass.php";
  $myobj = new MyClass(15, 17);
  echo "<br />";
  echo $myobj->x;
  echo "<br />";
  echo $myobj->y;
  echo "<br />";
  echo MyClass::pi;
  echo "<br />";
  echo $myobj->sum();
  echo "<br />";
  echo $myobj->getPI();
?>

Здесь мы сначала подключили наш класс, потом создали объект, передав конструктору параметры (15 и 17). Затем начали выводить свойства. Как видите, синтаксис такой: "имя_объекта->имя_свойства". Безусловно, данные свойства будут выводиться только если они public, а если они являются private или protected, то, соответственно, Вы увидите ошибку. Также обратите внимание на вывод константы: "имя_класса::имя_константы".

Затем мы используем два метода (sum() и getPI()) и печатаем возвращаемые ими значения.

Если Вы впервые знакомитесь с ООП, то, думаю, что сейчас Вы в шоке. И это неудивительно, ведь тема эта очень сложная, и по ней пишут целые тома. Я постараюсь в дальнейших статьях раскрыть эту тему, чтобы Вы поняли преимущество ООП, ведь почти все, кто пишет большие скрипты на PHP используют ООП, и без него действительно трудно обойтись. А если Вы делаете небольшие скрипты, то тогда ООП использовать совсем необязательно. Но поверьте моему опыту, что если Вы будете серьёзно программировать (необязательно на PHP), то ООП Вы будете использовать в будущем на полную катушку, и я постараюсь Вам дать тот фундамент, ту базу, от которой Вы сможете уже повышать свой уровень знаний по этой теме.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (20):

lev_100rus lev_100rus 18.09.2012 01:29:15

Михаил, У Вас ошибка в предложении: "Обратите внимание, что мы обращаемся с помощью такой конструкции: "self:имя_константы". " Надо наверное написать "self::имя_константы" И пишите пожалуйста побольше статей про ООП! Реально полезная штука и многим пригодится

Ответить

Admin Admin 18.09.2012 14:01:21

Спасибо, исправил!

Ответить

kumakbtu kumakbtu 04.05.2013 14:13:10

Есть ли статический поля и методы в PHP. Если есть как надо объявлять и использовать?

Ответить

Admin Admin 04.05.2013 21:18:27

Есть: http://myrusakov.ru/php-static.html

Ответить

kumakbtu kumakbtu 04.05.2013 14:25:37

Имя класса обязательно должно быть одинаковым с именем файла? Например: файл cars.php и класс Cars. Ну как на Jave. Потом в cars.php после создание класса Cars можно дальше писать php скрипты в этом файле? Потом можно сделать так что бы когда делаем запрос из формы он отправился на определенную функцию класса, а не на все содержание php файла? Например в функцию addCar в классе Cars: <form action="cars.php/Cars/addCar" method="post"> <input type="text" name="car_name" /> <input type="submit" name="signin" /> </form>

Ответить

Admin Admin 04.05.2013 21:18:57

Нет, не обязательно. Второй вопрос вообще не понятен.

Ответить

malina95 malina95 02.06.2013 01:14:22

Здравствуйте Михаил, напишите пожалуйста статью/скрипт/готовый скрипт по автозагрузке классов и созданию объекта этого класса, нужно типа как в фреймворке CodeIgniter, тоесть там в котнроллере можно вызвать $this->load->model('social'); или $this->load->library('pagination'); вот как такое сделать ума не приложу, и кстати в нитернете такого нет, честно говорю, нет, я вот уже с ума схожу смотреть в одну точку 2 часа 17 минут, я на 381 странице в яндексе, и всё безрезультатно) Заранее спасибо

Ответить

len-ok len-ok 05.08.2013 19:30:09

Всю сущность я поняла. Но написав предложенный скрипт в итоге на мониторе получила лишь значение константы. Сумма была равна нулю. Т.е. свойства х и у отсутствовали. Уже битый час перепроверяю и не могу понять почему?

Ответить

anonim09 anonim09 18.11.2013 12:16:57

Здравствуйте, Михаил у меня есть класс для Регистрации, в нем функции для проверки поступающих с формы данных, подключения к бд и записи данных, но появляется ошибка: Parse error: syntax error, unexpected T_PUBLIC in Q:\home\local.site\www\php\regestration.php on line 27. Не подскажите, в чем дело?

Ответить

tikkiwiki tikkiwiki 18.11.2013 16:20:10

Здравствуйте Аноним. Пожалуйста, приведите пример вашего кода. Но постараюсь ответить на Ваш вопрос заранее. Эта синтаксическая ошибка, связанная с тем, что public может быть использован только в функции объявленной внутри класса. Пожалуйста, просмотрите внимательнее Ваш код на наличие данной ошибки.

Ответить

anonim09 anonim09 18.11.2013 16:51:21

Спасибо за ответ, но правильно ли я понимаю, что объявлять функции нужно так: $page = new Regestration(); //Объявление класса $page = connectMysql(); //Объявление функции Я так делал.

Ответить

tikkiwiki tikkiwiki 18.11.2013 17:33:29

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

Ответить

anonim09 anonim09 18.11.2013 18:00:36

А смотрел весь этот курс, но там только в процедурном стиле а я использую ООП.

Ответить

tikkiwiki tikkiwiki 18.11.2013 18:20:22

И это все равно Вас не спасает от моей рекомендации.

Ответить

anonim09 anonim09 18.11.2013 20:25:26

Спасибо большое только сейчас вникнул и понял, в чём моя ошибка.

Ответить

tikkiwiki tikkiwiki 18.11.2013 21:23:41

Не за что, искренне рад за Вас.

Ответить

Yuliya Yuliya 13.03.2014 15:12:13

Елена, у меня та же история была. Оказалось, что в строчке "public function __construct($x, $y) {" два двойных подчёркивания, а я одно поставила.

Ответить

vasmar vasmar 07.11.2014 16:48:18

Михаил, здравствуй. Подскажи, пожалуйста, у меня в результате выполнения первые три строчки - пустые, потом идет вывод pi, далее вывод суммы (она равна 0), и снова вывод пи. Т.е.значения x и y - не присваиваются. С чем это может быть связано? И у меня нет подсветки синтаксиса имени класса. Может у меня не "подключается" сам класс? ? Спасибо, я сама разобралась. Ответ - надо ставить 2 символа подчеркивания)))

Ответить

денис2015 денис2015 17.08.2015 15:35:26

Все очень доступно и понятно спс

Ответить

blits blits 20.11.2015 20:00:22

А как можно наследовать значения из переменной при вызове? Например $class = new MyClass(); $class->getUser()->delete() Функция delete() получает значение результата getUser()

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.