Что такое метод php
Блог веб разработки статьи | видеообзоры | исходный код

- Главная /
- PHP & SQL /
- методы классов PHP
методы классов PHP

Всем привет и сегодня мы с вами рассмотрим функции отладки которые могут получать информацию о классах, их методах и свойствах. Поехали!
Допустим у нас есть некий класс:
class Main < private $hello = "Hello world"; public function __construct() < echo $this->getParam(); > private function getParam()< return $this->hello; > > $object_Main = new Main();
здесь у нас определен класс Main и создан его объект $object_Main, в результате чего у нас выводится строчка ‘Hello world’. И мы хотим проверить действительно ли у нас существует данных класс. Сделать это можно используя функцию class_exists():
if(class_exists('Main'))< echo 'Класс существует'; >else
В качестве аргумента данной функции передается название класса, который мы хотим проверить на существование. И если класс существует в контексте данного документа нам возвращается true, а если нет то false. Здесь все просто.
Причем что еще важно. Регистр в названии класса не учитывается, то есть мы можем написать не Main, а mAiN и все будет работать.
Едем дальше. С помощью функции get_declared_classes() мы получим массив со всеми доступными нам классами:
echo ""; print_r(get_declared_classes()); echo "";
здесь вы возможно будете немного шокированы количеством классов которые нам доступны. Классы которые вы создали в контексте данного документа будут в самом конце списка этого массива.
Через созданный объект класса вы можете получить его имя:
echo get_class($object_Main);нам вернется имя класса объекта(Main).
Мы также зная имя класса можем получить перечень его методов, используя функцию get_class_methods():
print_r(get_class_methods('Main'));в качестве аргумента мы передаем имя класса. Здесь важно понимать что нам вернутся методы класса только с модификатором доступа public.
Однако мы с помощью функции method_exists() можем проверять наличие метода с любым модификатором в классе.
if(method_exists($object_Main,'getParam'))< echo 'Да метод существует'; >elseданной функции уже передается два параметра. Первый объект класса, второй название метода который мы проверяем на наличие. Результатом исхода будет true или false.
Чтобы получить перечень свойств класса можно воспользоваться функцией get_class_vars():
print_r(get_class_vars('Main'));нам вернется массив свойств класса Main с модификатором доступа public.
И напоследок давайте рассмотрим еще одну функцию, которая позволяет определять название родительского класса:
if(get_parent_class('Main')) < echo "Имя родительского класса ".get_parent_class('Main'); >elseздесь мы проверили есть ли у класса Main родительский класс. В нашем случае его нет. Поэтому нам вернется false, а в другом случае возвращается имя родительского класса.
Вот в принципе и все что я хотел вам рассказать. Данными функциями в основном пользуются для отладки программного кода. Когда необходимо получить краткую и структурированную информацию о классе не углубляясь в сам код.
На этом я с вами прощаюсь и желаю удачи! Пока!
Оцените статью:
Статьи
- Javascript генераторы
- Теги текста HTML
- hide show JQuery
- svg html
- SQL html
- touch action CSS
- python pyperclip
- css zoom
Комментарии
Внимание. Комментарий теперь перед публикацией проходит модерацию
Все комментарии отправлены на модерацию
© 2017-2023 webfanat.com Все права защищены.

Запись экрана
Данное расширение позволяет записывать экран и выводит видео в формате webm
Добавить приложение на рабочий стол
Статические методы и свойства в PHP
Сегодня мы поговорим о статических свойствах и методах в PHP. Если коротко – то это свойства и методы, которые принадлежат классу целиком, а не созданным объектам этого класса. То есть использовать их можно даже без создания объектов. Иногда их называют просто свойствами и методами класса. Не путайте их со свойствами и методами объектов, которые мы изучали ранее!
Продолжение урока будет доступно вам
после покупки ООП в PHP
Объектно-ориентированное программирование
При создании программы на PHP и отдельных ее блоков нам вполне может хватить той функциональности, которую представляют функции. Однако PHP имеет и другие возможности по созданию программ, которые представляет объектно-ориентированное программирование. В ряде случаев программы, использующие ООП, проще в понимании, их легче поддерживать и изменять.
Ключевыми понятиями парадигмы ООП являются понятия «класс» и «объект». Описанием объекта является класс, а объект представляет экземпляр этого класса. Можно провести следующую аналогию: например, у каждого человека есть имя, определенный возраст, вес, какие-то другие параметры. То есть некоторый шаблон, который содержит набор параметров человека — этот шаблон можно назвать классом. А реально же существующий человек с конкретным именем, возрастом, весом и т.д. является объектом или экземпляром этого класса.
Для создания класса в PHP используется ключевое слово class , после которого идет название класса и фигурные скобки <> — блок кода класса. Например, новый класс, представляющий пользователя:
class Person <>
Чтобы создать объект класса Person, применяется ключевое слово new :
$person = new Person(); print_r($person); ?>
В данном случае переменная $person является объектом класса Person . С помощью функции print_r() можно вывести содержимое объекта, как и в случае с массивами.
При этом неважно, определяется класс до или после создания объекта. Например, мы можем сначала определить переменную класса, а потом определить этот класс:
Свойства и методы
Класс может содержать переменные, которые описывают какие-то признаки объекта, его состояние и которые еще назывют свойствами или атрибутам. И также класс класс может содержать функции, которые еще назвают методами и которые определяют его поведение.
Так, добавим в класс Person несколько свойств и методов:
"; > > $tom = new Person(); $tom->name = "Tom"; // установка свойства $name $tom->age = 36; // установка свойства $age $personName = $tom->name; // получение значения свойства $name echo "Имя пользователя: " . $personName . "
"; $tom->hello(); // вызов метода hello() print_r($tom); ?>
Здесь класс Person содержит два свойства: $name и $age . Свойства объявляются как обычные переменные, перед которыми стоит модификатор доступа — в данном случае модификатор public .
Методы представляют обычные функции, которые выполняют определенные действия. Здесь функция hello() просто выводит приветствие.
После создания объекта класса Person:
$tom = new Person();
Мы можем через имя переменной класса обращаться к его свойствам и методам. Чтобы обратиться к свойствам и методам объекта применяется оператор доступа -> . Например, установить значения свойств:
$tom->name = "Tom"; // установка свойства $name $tom->age = 36; // установка свойства $age
Или получить значение (например, присвоить его переменной):
$personName = $tom->name; // получение значения свойства $name
Или вызвать методы объекта:
$tom->hello(); // вызов метода hello()
В итоге мы получим следующий вывод браузера:
Имя пользователя: Tom Hello! Person Object ( [name] => Tom [age] => 36 )
При этом свойствам можно задать в классе некоторые начальные значения:
"; > > $tom = new Person(); $tom->age = 36; // установка свойства $age echo "Имя пользователя: " . $tom->name . "
"; echo "Возраст пользователя: " . $tom->age . "
"; ?>
Имя пользователя: Undefined Возраст пользователя: 36
Ключевое слово this
Для обращения к свойствам и методам объекта внутри его класса применяется ключевое слово this . Например, определим в классе метод для вывода информации об объекте:
name ."; Age: " . $this->age . "
"; // также можно написать // echo "Name: $this->name; Age: $this->age
"; > > $tom = new Person(); $tom -> name = "Tom"; $tom -> displayInfo(); // Name: Tom; Age: 18 ?>
Для обращения к полям и методам внутри класса также применяется оператор доступа -> , перед которым идет $this . Причем это $this указывает именно на текущий объект. Что это значит в практическом плане? Например:
name; Age: $this->age
"; > > $tom = new Person(); $tom -> name = "Tom"; $tom -> displayInfo(); $bob = new Person(); $bob -> name = "Bob"; $bob -> age = 25; $bob -> displayInfo(); ?>
$tom -> displayInfo();
$this фактически будет указывать на переменную $tom . Тогда как при вызове
$bob -> displayInfo();
$this будет указывать на переменную $bob .
Name: Tom; Age: 18 Name: Bob; Age: 25
Сравнение объектов
При сравнении объектов классов следует принимать во внимание ряд особенностей. В частности, при использовании оператора равенства == два объекта считаются равными, если они представляют один и тот же класс и их свойства имеют одинаковые значения.
А при использовании оператора эквивалентности === оба объекта считаются равными, если обе переменных классах указывают на один и тот же экземпляр класса.
Рассмотрим на примере:
name; Age: $this->age
"; > > $tom = new Person(); $tom -> name = "Tom"; $tom -> age = 36; $tomas = new Person(); $tomas -> name = "Tom"; $tomas -> age = 36; if($tom == $tomas) echo "переменные tom и tomas равны
"; else echo "переменные tom и tomas НЕ равны
"; if($tom === $tomas) echo "переменные tom и tomas эквивалентны"; else echo "переменные tom и tomas НЕ эквивалентны"; ?>
Здесь сравниваются две переменных — $tom и $tomas. Они представляют один и тот же класс Person, и их свойства имеют одни и те же значения. Однако они представляют разные объекты. Поэтому при сравнении оператор == возвратит true , а оператор === — false :
переменные tom и tomas равны переменные tom и tomas НЕ эквивалентны
Возьмем другой пример, когда обе переменных представляют один и тот же объект:
$person = new Person(); $tom = $person; $tom -> name = "Tom"; $tom -> age = 36; $tomas = $person; if($tom == $tomas) echo "переменные tom и tomas равны
"; else echo "переменные tom и tomas НЕ равны
"; if($tom === $tomas) echo "переменные tom и tomas эквивалентны"; else echo "переменные tom и tomas НЕ эквивалентны";
Здесь объект класса Person создается только один раз: $person = new Person(); . И затем обе переменных $tom и $tomas будут указывать на этот объект. При этом не имеет значения, для какой именно переменной мы устанавливаем свойства. Так как в реальности это будет один и тот же объект. В итоге и оператор == , и оператор === при сравнении возвратят true
переменные tom и tomas равны переменные tom и tomas эквивалентны
Шпаргалка по магическим методам PHP
В этой статье вы найдете краткое описание всех магических методов, доступных в PHP. Независимо от того, являетесь ли вы опытным PHP-разработчиком, или начинающим, – если вам приходилось иметь дело с объектно-ориентированным программированием на PHP, вы уже сталкивались, по крайней мере, с некоторыми из магических методов.
Если же вы раньше не слышали об этих методах, позвольте мне их представить. Следующие PHP-функции называются магическими:
Названия этих функций зарезервированы – если вы дадите своей собственной функции одно из этих названий, функциональность магического метода будет ассоциироваться с вашим методом. Все магические методы должны объявляться как общедоступные.
Магическими эти методы называются по той причине, что они вызываются автоматически, если вы определите один из этих методов в классе. Вам остается лишь определить, какую задачу будет выполнять метод. Лучший пример – функция __construct() , которая вызывается автоматически каждый раз при создании экземпляра объекта.
В общих словах, магические методы PHP позволяют выполнять различные операции с объектами. Кроме того, они позволяют обрабатывать определенные типы событий при помощи манипуляции объектами.
Магические PHP методы
Далее мы кратко рассмотрим все магические методы, доступные в языке программирования PHP.
Метод __construct()
При определении этого метода в классе, функция будет автоматически вызываться во время создания каждого экземпляра класса. Назначение метода – передача объекту начальных параметров, используемых по умолчанию. Этот метод иногда называют конструктором ( constructor ).
Вот пример использования этого метода:
name = $name; $this->email = $email; > > $objStudent = new Student('John', 'john@tutsplus.com'); ?>
В данном примере во время создания нового объекта с параметрами new student(‘John’,’john@tutsplus.com’), происходит первый вызов метода __construct() . С помощью __construct() мы передаем объекту значения для некоторых из его свойств.
Метод __destruct()
Метод __destruct() называется деструктором, и вызывается во время уничтожения объекта. Обычно это происходит после остановки или завершения скрипта. Назначение метода – предоставить разработчику возможность сохранить состояние объекта или выполнить какое-то другое действие, следующее за завершением сценария.
name = $name; $this->email = $email; > public function __destruct() < echo 'Вызывается во время уничтожения объекта. '; // сохранение состояния объекта или другие действия >> $objStudent = new Student('John', 'john@tutsplus.com'); ?>
Метод __set()
Магический метод __set() вызывается при попытке присвоить данные недоступным или несуществующим свойствам объекта. Назначение этого метода – задание дополнительных данных объекта, для которых вы явно не определили свойства.
Метод работает следующим образом:
data[$name] = $value; > > $objStudent = new Student(); // вызов __set() $objStudent->phone = '0491 570 156'; ?>
В приведенном примере мы попытались задать значение несуществующего свойства phone . В результате происходит вызов __set(). В качестве первого аргумента метода __set() выступает название задаваемого свойства, вторым аргументом выступает значение для этого свойства.
Метод __get()
Если __set() используется для задания значений несуществующих свойств, то __get() выполняет противоположную функцию. Этот метод вызывается в случае, если код пытается считать данные из несуществующих или недоступных свойств объекта. Назначение метода – предоставить значения таким свойствам.
На практике это выглядит следующим образом:
data[$name] = $value; > public function __get($name) < If (isset($this->data[$name])) < return $this->data[$name]; > > > $objStudent = new Student(); // вызов __set() $objStudent->phone = '0491 570 156'; //вызов __get() echo $objStudent->phone; ?>
Метод __toString()
Позволяет определить, что именно вы хотите вывести на экран в том случае, если объект обрабатывается, как строка. К примеру, если вы не применяли метод __toString() для объекта, который используется echo или print , возникнет ошибка.
Рассмотрим на примере:
name = $name; $this->email = $email; > public function __toString() < return 'Student name: '.$this->name . '
' . 'Student email: '.$this->email; > > $objStudent = new Student('John', 'john@tutsplus.com'); echo $objStudent; ?>
Здесь во время вывода echo объект $objStudent вызывает метод __toString() . Внутри этого метода мы определили, что именно мы хотим вывести на экран. Если бы мы этого не сделали, во время исполнения кода произошла бы ошибка.
Методы __call() и __callStatic()
Если методы __get() и __set() используются в случае обращения к несуществующим свойствам, то метод __call() вызывается при попытке использования недоступных методов, которые вы еще не определили в своем классе.
> $objStudent = new Student(); $objStudent->getStudentDetails(1); ?>
Как можно заметить, в приведенном выше примере мы пытаемся вызвать метод getStudentDetails , который еще не определен, что приводит к вызову __call() . В качестве первого аргумента выступает название вызываемого метода, второй аргумент состоит из списка значений, передаваемых методу.
Метод __callStatic() очень похож на __call() , за единственным исключением: он вызывается в случае обращения к несуществующим методам в статическом контексте. Таким образом, если вы пытаетесь обратиться к неопределенному статическому объекту – воспользуйтесь __callStatic().
Методы __isset() и __unset()
Магический метод __isset() вызывается в случае, если код использует isset() для обращения к несуществующим (или недоступным) свойствам объекта. Посмотрим, как это выглядит на практике:
data[$name]); > > $objStudent = new Student(); echo isset($objStudent->phone); ?>
В этом фрагменте свойство phone не определено в объекте, что приводит к вызову метода __isset() .
Метод __unset() , в свою очередь, вызывается в том случае, если выполняется вызов unset() для свойств объекта, которые в данный момент не определены или недоступны.
Методы __sleep() и __wakeup()
Магический метод __sleep() отличается от функций, которые мы рассматривали до этого момента. Он вызывается во время обращения к объекту с помощью функции serialize() . В случае очень большого объекта требуется сохранить лишь выбранные свойства во время сериализации и после этого закрыть объект. Метод __sleep() в таком случае возвращает массив с именами всех свойств объекта, которые должны быть сериализированы (преобразованы в специальную строку).
Посмотрим, как можно применить этот метод:
name = $name; $this->email = $email; $this->phone = $phone; > public function __sleep() < return array('name', 'email', 'phone'); >public function __wakeup() < $this->db_connection_link = your_db_connection_function(); > > ?>
В данном примере во время получения данных из объекта Student , он вызывает метод __sleep() . В результате сохраняются только нужные значения переменных – имя, адрес электронной почты, номер телефона ( name , email , phone ).
С другой стороны, магический метод __wakeup() используется для восстановления связей с объектами и выполнения заданий после того, как передача данных (сериализация) закончена и для объекта вызывается функция unserialize() .
Метод __invoke()
Это особый метод – он используется в том случае, когда объект вызывается в качестве функции. Сначала мы посмотрим, как __invoke() работает, а затем обсудим его назначение.
name = $name; $this->email = $email; > public function __invoke() < echo 'Объект Student вызывается в качестве функции'; >> $objStudent = new Student('John', 'john@tutsplus.com'); $objStudent(); ?>
Как можно увидеть в этом примере, код вызывает объект $objStudent , как функцию. Поскольку мы используем метод __invoke() , это действие не приведет к ошибке. В этом и заключается назначение метода __invoke() – он позволяет нам вызывать объекты так же, как функции.
Метод __clone()
Для создания копии существующего объекта можно использовать команду clone . Однако если нужно изменить свойства скопированного объекта после клонирования, следует определить в классе магический метод __clone() :
class Student < private $name; private $email; private $object_student_school; public function __construct() < $this->object_student_school = new Student_School(); > public function __clone() < $this->object_student_school = clone $this->object_student_school; > > $objStudentOne = new Student(); $objStudentTwo = clone $objStudentOne; ?>
Приведенный выше фрагмент кода на первом этапе создает поверхностную копию объекта – как следствие, вложенные объекты при этом не копируются. В контексте данного примера, если бы мы не использовали метод __clone() , копия объекта, $objStudentTwo , по-прежнему указывала бы на объект Student_School , на который ссылается оригинал, $objStudentOne . Однако использование магического метода __clone() обеспечивает нам копирование Student_School вместе с главным объектом.
Метод __debugInfo()
Этот магический метод вызывается при попытке сброса объекта с помощью функции var_dump() . Если вы не определили __debugInfo() в своем классе, он выведет все общедоступные, частные и защищенные свойства. Поэтому, если вы хотите ограничить информацию, отображаемую при сбросе, используйте этот метод.
$this->name); > > $objStudent = new Student(); var_dump($objStudent); // object(Student)#1 (1) < ["student_name"]=>NULL > ?>
Данный метод возвращает массив, состоящий из ключей и значений, которые будут отображаться в то время, когда функция var_dump() вызывается для объекта. Как вы можете видеть, у нас есть возможность полностью контролировать отображение данных, которые выводятся на экран в ходе сброса с помощью var_dump() .
Метод __set_state()
Это статический метод, который используется в связке с функцией var_export() . Данная функция выводит структурированную информацию о переменной. Если вы используете функцию var_export() для экспорта класса, вам необходимо определить в нем метод __set_state() :
name = $name; $this->email = $email; > public static function __set_state(array $array) < $obj = new Student; $obj->name = $array['name']; $obj->email = $array['email']; return $obj; > > $objStudent = new Student('John','John@yahoo.com'); var_export($objStudent); // Output: Student::__set_state(array( 'name' => 'John', 'email' => 'John@yahoo.com', )) ?>
Как можно заметить, экспортируемая строка представляет собой валидный PHP-код, который в случае необходимости можно использовать для создания объекта.
Заключение
В этой статье мы рассмотрели все магические методы, доступные в PHP. Использование каждого метода было проиллюстрировано примером кода. Надеюсь, что эта статья пригодится вам в качестве референса или подсказки во время работы над разнообразными PHP-проектами.
