От автора: приветствую Вас дорогой друг. Мы с Вами разобрались с понятием объектно-ориентированное программирование на PHP, познакомились с классами и научились их создавать, но по большому счету использовать полученные знания так и не можем, потому что для этого нужно создать объект. А значит, в данной статье Вы узнаете, как выполняется инициализация объектов php, что это такое и как их можно использовать.
В предыдущих статьях мы с Вами говорили, что класс это основа объектно-ориентированного программирования на PHP и по сути это шаблон для создания будущих объектов. То есть класс – это чертеж, а как вы знаете любой чертеж необходим только для создания чего то реального, чего то, что будет выполнять определенные действия в зависимости от описанного в чертеже функционале.
Соответственно объект – это определенный набор данных (свойств) и методов, которые формируются в соответствии с шаблоном, описанным в классе. Так же можно сказать, что объект – это экземпляр класса. Его тип определяется классом.
При этом объект – это еще и своеобразный тип данных, для создания которого используется специальное ключевое слово new, вместе с именем интересующего класса. Таким образом, можно сказать, что формируется новый элемент (объект) по определенному шаблону (классу).
Для примера давайте рассмотрим следующий класс:
1 2 3 4 5 6 7 8 9 10 11 |
<?php class MyClass { public $prop1 = 100; public $prop2 = "Hello world"; public $prop3 = TRUE; public function getStr() { return "Hello world"; } } |
Инициализация объектов класса php будет выглядеть следующим образом.
1 2 |
$obj1 = new MyClass(); $obj2= new MyClass(); |
Обратите внимание, что после оператора new указывается единственный операнд – имя интересующего класса, объект которого создается. Таким образом, класс MyClass, выступает в роли шаблона для двух созданных объектов типа MyClass. Конечно, в данный момент они абсолютно идентичны, но в тоже время это два разных объекта одного типа, созданные с помощью одного класса. Опять же возвращаясь к примеру с автомобилями, о котором мы говорили еще в первой статье серии, объект $obj1 – это автомобиль, созданный по чертежу MyClass, а объект $obj2 – это совсем другой автомобиль, но созданный по все тому же чертежу MyClass. Автомобили могут быть и одинаковыми в плане функционала, но могут быть у них разные номера, возможно разный окрас, комплектация и т.д.
С технической стороны можно сказать, что каждому создаваемому объекту в PHP скрипте присваивается уникальный идентификатор в пределах конкретного скрипта, но уникален он только на время существования объекта в приложении. То есть после его удаления, данный идентификатор может повторно использоваться.
Вы можете спросить, зачем при инициализации объекта указывать круглые скобки справа от имени класса. Данные скобки необходимы для передачи аргументов методу конструктору класса. Но изучение данного метода выходит за рамки текущей статьи, а значит пока данное понятие мы пропустим.
При этом если объект это тип данных и мы говорим, что он содержит в себе помимо функционала некий набор информации, в виде свойств, давайте распечатаем на экран его содержимое, используя одну из функций var_dump() или print_r():
1 |
var_dump($obj1); |
В этом случае на экране мы увидим следующее.
То есть мы видим значения свойств, а так же идентификатор созданного объекта, в моем случае 1. Если распечатать второй созданный объект, по сути картина будет абсолютно такой же за исключением идентификатора. Поэтому давайте немного изменим второй объект, а именно обратимся к его свойству $prop1, и присвоим новое значение, к примеру ‘Some String’.
1 |
$obj2->prop1 = "Some String"; |
Обратите внимание, что доступ к свойствам объекта реализуется с помощью символов ‘->’, указав имя объектной переменной и имя свойства. Таким образом, обратившись к свойству объекта, мы можем работать с ним как с обычной переменной. При распечатке второго объекта, на экране мы увидим следующее.
При этом, первый объект остался не тронутым, а второй изменен, хотя оба они созданы из одного класса.
Таким образом, объявляя и определяя свойства в классе, Вы как бы гарантируете, что при создании любого объекта данного класса — это свойство будет присутствовать и его значение заранее определено.
В свою очередь методы объекта, определяют его функционал и доступ к ним можно получить, все так же используя знаки ‘->’. К примеру:
1 |
echo $obj1->getStr(); |
Как Вы видите, по сути, обычный вызов функции, правда данная функция определена в классе, а значит и у его объекта.
Таким образом, в php инициализация объекта достаточно простая, но очень полезная операция. Мы с Вами рассмотрели очень простые классы, которые конечно же в реальной жизни не применяются, но они отлично показывают как объекты ,которые формируются на их основе, получают доступ к описанному функционалу и указанным данным.
На этом данная статья завершена. Всего Вам доброго и удачного кодирования!