Создание класса в PHP
PHP - это объектно-ориентированный язык, и возможностей у него в этом направлении очень много, и совершенно глупо их не использовать. Для тех, кто не знаком с ООП предлагаю почитать эту статью: ООП в JavaScript. Основой ООП является объект, а фабрикой для создания объектов является класс. И как раз о создании классов в PHP мы и поговорим в этой статье.
Класс состоит из следующих частей:
- Свойства.
- Конструктор.
- Методы.
Но прежде, чем добавлять все эти части давайте создадим описание класса (пусть файл называется "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), то ООП Вы будете использовать в будущем на полную катушку, и я постараюсь Вам дать тот фундамент, ту базу, от которой Вы сможете уже повышать свой уровень знаний по этой теме.
-
- Михаил Русаков
Комментарии (20):
Михаил, У Вас ошибка в предложении: "Обратите внимание, что мы обращаемся с помощью такой конструкции: "self:имя_константы". " Надо наверное написать "self::имя_константы" И пишите пожалуйста побольше статей про ООП! Реально полезная штука и многим пригодится
Ответить
Спасибо, исправил!
Ответить
Есть ли статический поля и методы в PHP. Если есть как надо объявлять и использовать?
Ответить
Есть: http://myrusakov.ru/php-static.html
Ответить
Имя класса обязательно должно быть одинаковым с именем файла? Например: файл 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>
Ответить
Нет, не обязательно. Второй вопрос вообще не понятен.
Ответить
Здравствуйте Михаил, напишите пожалуйста статью/скрипт/готовый скрипт по автозагрузке классов и созданию объекта этого класса, нужно типа как в фреймворке CodeIgniter, тоесть там в котнроллере можно вызвать $this->load->model('social'); или $this->load->library('pagination'); вот как такое сделать ума не приложу, и кстати в нитернете такого нет, честно говорю, нет, я вот уже с ума схожу смотреть в одну точку 2 часа 17 минут, я на 381 странице в яндексе, и всё безрезультатно) Заранее спасибо
Ответить
Всю сущность я поняла. Но написав предложенный скрипт в итоге на мониторе получила лишь значение константы. Сумма была равна нулю. Т.е. свойства х и у отсутствовали. Уже битый час перепроверяю и не могу понять почему?
Ответить
Здравствуйте, Михаил у меня есть класс для Регистрации, в нем функции для проверки поступающих с формы данных, подключения к бд и записи данных, но появляется ошибка: Parse error: syntax error, unexpected T_PUBLIC in Q:\home\local.site\www\php\regestration.php on line 27. Не подскажите, в чем дело?
Ответить
Здравствуйте Аноним. Пожалуйста, приведите пример вашего кода. Но постараюсь ответить на Ваш вопрос заранее. Эта синтаксическая ошибка, связанная с тем, что public может быть использован только в функции объявленной внутри класса. Пожалуйста, просмотрите внимательнее Ваш код на наличие данной ошибки.
Ответить
Спасибо за ответ, но правильно ли я понимаю, что объявлять функции нужно так: $page = new Regestration(); //Объявление класса $page = connectMysql(); //Объявление функции Я так делал.
Ответить
Пожалуйста, попробуйте разобраться сами, как правильно объявить функцию, объявить класс, все это рассказывается в курсах для новичков Михаила Русакова, просмотрите повнимательнее и постарайтесь вникнуть, т.к это очень важно для дальнейших реализаций ваших затей.
Ответить
А смотрел весь этот курс, но там только в процедурном стиле а я использую ООП.
Ответить
И это все равно Вас не спасает от моей рекомендации.
Ответить
Спасибо большое только сейчас вникнул и понял, в чём моя ошибка.
Ответить
Не за что, искренне рад за Вас.
Ответить
Елена, у меня та же история была. Оказалось, что в строчке "public function __construct($x, $y) {" два двойных подчёркивания, а я одно поставила.
Ответить
Михаил, здравствуй. Подскажи, пожалуйста, у меня в результате выполнения первые три строчки - пустые, потом идет вывод pi, далее вывод суммы (она равна 0), и снова вывод пи. Т.е.значения x и y - не присваиваются. С чем это может быть связано? И у меня нет подсветки синтаксиса имени класса. Может у меня не "подключается" сам класс? ? Спасибо, я сама разобралась. Ответ - надо ставить 2 символа подчеркивания)))
Ответить
Все очень доступно и понятно спс
Ответить
А как можно наследовать значения из переменной при вызове? Например $class = new MyClass(); $class->getUser()->delete() Функция delete() получает значение результата getUser()
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.