В PHP имеется набор специальных предопределенных констант и магических методов для ваших проектов. В отличие от обычных констант, которые можно устанавливать с помощью define() , значение предопределенных констант зависит от того, где они используются, и является информацией только для чтения о коде и PHP системе. Магические методы можно использовать в ваших классах для получения доступа к специальному функционалу PHP.
В данном уроке мы рассмотрим несколько полезных предопределенных констант и магических методов с примерами использования в коде.
Предопределенные константы
Предопределённые константы используются для получения информации о вашем коде. Имя такой константы пишется заглавными буквами между сдвоенными подчеркиваниями, например, __LINE__ и __FILE__ . Вот несколько полезных предопределённых констант, доступных в PHP:
- __LINE__ возвращает номер строки в исходном файле, где используется константа:
- __FILE__ представляет имя файла, включая полный путь:
- __DIR__ представляет только путь к файлу:
- __CLASS__ представляет имя текущего класса:
- __FUNCTION__ представляет имя текущей функции:
- __METHOD__ представляет имя текущего метода:
- __NAMESPACE__ представляет имя текущего пространства имен:
Магические методы
Магические методы представляют крючки для специального функционала PHP. Их имена пишутся маленькими буквами с двумя предшествующими подчеркиваниями, например, __construct() и __destruct() .
Construct() - магический метод, который PHP вызывает для создания экземпляра вашего класса. Он принимает любое количество аргументов.
Destruct()- магический метод, который вызывается, когда объект уничтожается коллектором PHP. Данный метод не принимает аргументов и обычно используется для выполнения специальных операций, например, для закрытия соединения с базой данных.
Следующие несколько магических методов предназначены для манипуляций со свойствами, и представляют способ для PHP обработать обращения ко свойствам и методам, которые не были определены (или недоступны).
PHP вызывает метод __get() в получающем контексте, если свойство не определено (или недоступно). Метод принимает один аргумент - имя свойства. Он должен вернуть значение, которое будет обрабатываться как значение свойства.
Метод __set() вызывается для неопределенного свойства в задающем контексте. Данный метод принимает два аргумента, имя свойства и значение.
myAarray[$prop] = $value; } public function __get($prop) { return $this->myArray[$prop]; } public function __isset($prop) { return isset($this->myArray[$prop]); } public function __unset($prop) { unset($this->myArray[$prop]); } public function __toString() { return __CLASS__ . ":" . $this->name; } } $obj = new MySample(); if (!isset($obj->name)) { $obj->name = "Alireza"; } echo $obj->name; // Alireza echo $obj; // MySample:Alireza
В выше приведенном коде свойство name не определено в классе. В коде предпринимается попытка назначить данному свойству значение “Alireza” и PHP вызывает магический метод __set() . Он получает “name” в качестве аргумента $prop и “Alireza” как $value , и сохраняет значение в частном массиве $myArray . Метод __get() работает в схожей манере. При выводе $obj->name вызывается метод __get() и ему передается значение “name” как аргумент $prop .
Есть и другие магические методы, которые помогают манипулировать недоступными свойствами, как в приведенном примере: __isset() , __unset() и __toString() . Оба метода __isset() и __unset() запускаются функциями с такими же именами, но без подчеркиваний в PHP.
Isset() проверяет, установлено свойство или нет. Данный метод принимает один аргумент - свойство, которое надо проверить. Метод __unset() принимает один аргумент, имя свойства, которое нужно сбросить.
Во многих случаях удобно представление объекта как строки, например, для вывода пользователю или другому процессу. Обычно PHP представляет объект как идентификатор в памяти, что плохо для таких функций. Метод __toString() помогает представить объект как строку. Метод запускается во многих ситуациях, где объект используется как строка, например, echo "Hello $obj" . Также его можно вызвать непосредственно, как любой другой публичный метод.
Встречаются случаи, когда переменные довольно неудобно использовать для постоянного хранения каких либо определенных значений, которые не меняются в течение работы программы. Такими значениями могут быть математические константы, пути к файлам, разнообразные пароли и.т.д. Как раз для этих целей в PHP предусмотрена такая конструкция, как.
называется именованная величина, которая не изменяется в процессе выполнения программы (скрипта).
В РНР константы определяются функцией define() . Эта функция имеет следующий формат:
define ($name , $value , $case_sen ), где:
$name
- имя константы;
$value
- значение константы;
$case_sen
- необязательный параметр логического типа,
указывающий, следует ли учитывать регистр букв (true) или нет (false).
Пример определения и использования констант в PHP:
php
echo pi
;
// Выводит 3.14
?>
Если параметр $case_sen равен true , то интерпретатор будет учитывать регистр символов при работе с константой. Обратите внимание, что константы используются без предваряющего знака $ .
Различия между константами и переменными:
У констант нет приставки в виде знака доллара ($ );
Константы можно определить только с помощью функции define() , а не присваиванием значения;
Константы могут быть определены и доступны в любом месте без учета области видимости;
Константы не могут быть определены или аннулированы после первоначального объявления;
Константы могут иметь только скалярные значения.
Проверка существования констант
Для проверки существования константы можно использовать функцию defined() . Данная функция возвращает true , если константа объявлена. Приведем пример:
php
// Объявляем константу pi
define
("pi"
,
3.14
,
true
);
if
(defined
("pi"
)==
true
)
echo
"Константа pi объявлена!"
;
// Скрипт выведет "Константа pi объявлена!"
?>
Предопределенные константы PHP
В PHP существуют следующие предопределенные константы:
PHP предоставляет большой список предопределенных констант для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.
Есть пять предопределенных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, константа __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже:
Имя | Описание |
---|---|
__LINE__ | Текущая строка в файле. |
__FILE__ | Полный путь и имя текущего файла. |
__DIR__ | The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root directory. |
__FUNCTION__ | Имя функции. (Добавлена в PHP 4.3.0.) |
__CLASS__ | Имя класса. (Добавлена в PHP 4.3.0.) |
__TRAIT__ | The trait name. The trait name includes the namespace it was declared in (e.g. Foo\Bar). |
__METHOD__ | Имя метода класса. (Добавлена в PHP 5.0.0) |
__NAMESPACE__ | The name of the current namespace. |
Дополнительно
В PHP имеется набор специальных предопределенных констант и магических методов для ваших проектов. В отличие от обычных констант, которые можно устанавливать с помощью define() , значение предопределенных констант зависит от того, где они используются, и является информацией только для чтения о коде и PHP системе. Магические методы можно использовать в ваших классах для получения доступа к специальному функционалу PHP.
В данном уроке мы рассмотрим несколько полезных предопределенных констант и магических методов с примерами использования в коде.
Предопределенные константы
Предопределённые константы используются для получения информации о вашем коде. Имя такой константы пишется заглавными буквами между сдвоенными подчеркиваниями, например, __LINE__ и __FILE__ . Вот несколько полезных предопределённых констант, доступных в PHP:
- __LINE__ возвращает номер строки в исходном файле, где используется константа:
- __FILE__ представляет имя файла, включая полный путь:
- __DIR__ представляет только путь к файлу:
- __CLASS__ представляет имя текущего класса:
- __FUNCTION__ представляет имя текущей функции:
- __METHOD__ представляет имя текущего метода:
- __NAMESPACE__ представляет имя текущего пространства имен:
Магические методы
Магические методы представляют крючки для специального функционала PHP. Их имена пишутся маленькими буквами с двумя предшествующими подчеркиваниями, например, __construct() и __destruct() .
Construct() - магический метод, который PHP вызывает для создания экземпляра вашего класса. Он принимает любое количество аргументов.
Destruct()- магический метод, который вызывается, когда объект уничтожается коллектором PHP. Данный метод не принимает аргументов и обычно используется для выполнения специальных операций, например, для закрытия соединения с базой данных.
Следующие несколько магических методов предназначены для манипуляций со свойствами, и представляют способ для PHP обработать обращения ко свойствам и методам, которые не были определены (или недоступны).
PHP вызывает метод __get() в получающем контексте, если свойство не определено (или недоступно). Метод принимает один аргумент - имя свойства. Он должен вернуть значение, которое будет обрабатываться как значение свойства.
Метод __set() вызывается для неопределенного свойства в задающем контексте. Данный метод принимает два аргумента, имя свойства и значение.
myAarray[$prop] = $value; } public function __get($prop) { return $this->myArray[$prop]; } public function __isset($prop) { return isset($this->myArray[$prop]); } public function __unset($prop) { unset($this->myArray[$prop]); } public function __toString() { return __CLASS__ . ":" . $this->name; } } $obj = new MySample(); if (!isset($obj->name)) { $obj->name = "Alireza"; } echo $obj->name; // Alireza echo $obj; // MySample:Alireza
В выше приведенном коде свойство name не определено в классе. В коде предпринимается попытка назначить данному свойству значение “Alireza” и PHP вызывает магический метод __set() . Он получает “name” в качестве аргумента $prop и “Alireza” как $value , и сохраняет значение в частном массиве $myArray . Метод __get() работает в схожей манере. При выводе $obj->name вызывается метод __get() и ему передается значение “name” как аргумент $prop .
Есть и другие магические методы, которые помогают манипулировать недоступными свойствами, как в приведенном примере: __isset() , __unset() и __toString() . Оба метода __isset() и __unset() запускаются функциями с такими же именами, но без подчеркиваний в PHP.
Isset() проверяет, установлено свойство или нет. Данный метод принимает один аргумент - свойство, которое надо проверить. Метод __unset() принимает один аргумент, имя свойства, которое нужно сбросить.
Во многих случаях удобно представление объекта как строки, например, для вывода пользователю или другому процессу. Обычно PHP представляет объект как идентификатор в памяти, что плохо для таких функций. Метод __toString() помогает представить объект как строку. Метод запускается во многих ситуациях, где объект используется как строка, например, echo "Hello $obj" . Также его можно вызвать непосредственно, как любой другой публичный метод.
Последнее обновление: 1.11.2015
Константы, как и переменные хранят определенное значение, только в отличие от переменных значение констант может быть установлено только один раз, и далее мы уже не можем его изменить. Например, определим числовую константу:
Для определения константы используется оператор define , который имеет следующую форму: define(string $name, string $value, bool $case_sen=false) . Параметр $name передает название константы, а параметр $value - ее значение. Третий необязательный параметр принимает логическое значение true или false . Если значение равно false, то при использовании константы будет учитываться ее регистр, если true - регистр не учитывается. В нашем случае третий параметр не использован, поэтому он по умолчанию равен false.
После определения константы мы можем ее использовать также, как и обычную переменную. Единственное исключение - мы не сможем изменить ее значение. Другое отличие от переменной - не надо использовать знак $ . То есть выражение NUMBER=33; работать не будет.
Предопределенные константы
Кроме создаваемых программистом констант в PHP имеется еще несколько встроенных констант:
FILE__ : хранит полный путь и имя текущего файла
LINE__ : хранит текущий номер строки, которую обрабатывает интерпретатор
DIR__ : хранит каталог текущего файла
FUNCTION__ : название обрабатываемой функции
CLASS__ : название текущего класса
METHOD__ : название обрабатываемого метода
NAMESPACE__ : название текущего пространства имен
Например, выведем текущую выполняемую строку и название файла:
Проверка существования константы
Чтобы проверить, определена ли константы, мы можем использовать функцию bool defined(string $name) . Если константа $name определена, то функция будет возвращать значение true
константы .Константам можно присваивать следующие типы данных.
Целые – целые числа или числа без десятичной точки (1, 999, 325812841).
Числа с плавающей точкой - числа, содержащие десятичную точку (1.11, 2.5, .44).
Строки – текстовая или числовая информация . Строковые данные всегда заключаются в кавычки ("Hello World", "478-477-5555").
Имена констант PHP в отличие от переменных не начинаются со знака "$". Имена констант обычно записывают в верхнем регистре. Имена констант могут содержать буквы, цифры и символ подчеркивания (_ ); они не могут, однако, начинаться с цифры. Объявление констант показано ниже.
define("STRING_CONSTANT", "This is my string."); define("NUMERIC_CONSTANT", 5);
Вывод констант
Следующий фрагмент кода демонстрирует объявление константы, присваивание константе значения и вывод результатов в окне браузера.
Пример 3.2.
My PHP program 500 2.25
В этом примере объявляются значения трех констант: STRING_CONST , INTEGER_CONST и FLOAT_CONST . Затем используется оператор echo для вывода содержимого констант в окне браузера. Кроме вывода в окне браузера, константы можно использовать при выполнении математических и строковых операций PHP.
Операторы PHP
Операторы применяются для выполнения операций или действий с переменными. Они могут включать присваивание значения переменной, выполнение сложения переменных, сравнение значений переменных и определение состояния условия.
Арифметические операторы
Операторы присваивания
Операторы сравнения
Логические операторы
Арифметические операторы используются для выполнения основных математических операций. В следующей таблице представлены арифметические операторы , которые применяются в PHP .
Пример 3.3.
The sum is 11 The difference is 9 The product is 27 The quotient is 343
Порядок выполнения операций
Когда вычисляется арифметическое выражение, существует заданный порядок, в котором выполняются операции. Этот порядок называется приоритетом операций. Умножение и деление имеют преимущество (и выполняются первыми) перед сложением и вычитанием, при движении в выражении слева направо. Этот порядок имеет важное влияние на то, будут ли получены ожидаемые результаты. Рассмотрим следующие объявления и присваивания.
Получающееся значение будет равно 18. Сначала $num1 умножается на $num2 , чтобы получить 20; затем $num3 вычитается из 20, чтобы получить 18. Предположим, однако, что в действительности надо сначала вычесть $num3 из $num2 , а затем умножить на $num1 , чтобы получить 12. Показанное выше выражение не создаст этот результат, потому что умножение имеет приоритет перед вычитанием и выполнится первым.
Поэтому часто необходимо переопределить порядок выполнения операций и явно управлять порядком вычисления выражения. Для этого используют скобки (), которые могут помочь изменить порядок выполнения арифметических операций. Приведенный выше пример можно переписать следующим образом.
В этот раз $answer равно 12. $num3 вычитается из $num2 , чтобы получить 3. Затем 3 умножается на $num1 .
Операторы присваивания используются для изменения значения текущей переменной на значение справа от оператора. В следующей таблице представлены операторы присваивания языка PHP.
Оператор | Описание |
---|---|
= | Переменной слева присваивается вычисленное справа значение |
+= | Складывает значение слева со значением справа и присваивает результат переменной слева |
-= | Вычитает значение справа из значения слева и присваивает результат переменной слева |
*= | Умножает значение справа на значения слева и присваивает результат переменной слева |
/= | Делит значение слева на значение справа и присваивает результат переменной слева |
%= | Делит значение слева на значение справа и присваивает остаток (по модулю) переменной слева |
.= | Значение слева соединяется (конкатенация) со значением справа, и результат присваивается переменной слева |
Операторы сравнения используются для сравнения значений. В следующей таблице представлены операторы сравнения языка PHP.