Это набор вопросов, которые время от времени возникают о синтаксисе в PHP. Это также Вики сообщества, поэтому все желающие могут принять участие в ведении этого списка.
Раньше было сложно найти вопросы об операторах и других синтаксических токенах.
Основная идея состоит в том, чтобы иметь ссылки на существующие вопросы по переполнению стека, чтобы нам было легче ссылаться на них, а не копировать содержимое из руководства по PHP.
Примечание: с января 2013 года переполнение стека поддерживает специальные символы. Просто окружите условия поиска кавычками, например, [php] "==" vs "==="
Если кто-то указал на вас кем-то из-за того, что вы задали такой вопрос, пожалуйста, найдите конкретный синтаксис ниже. Связанные страницы с Руководство по PHP вместе со связанными вопросами, скорее всего, ответит на ваш вопрос. Если это так, вам предлагается поднять ответ. Этот список не является заменой помощи, оказанной другими.
Если ваш конкретный токен не указан ниже, вы можете найти его в Список токенов парсера.
&
Битовые операторы или же Рекомендации
=&
Рекомендации
??
Null Coalesce Operator (начиная с PHP 7)
?string
?int
?array
?bool
?float
Обнуляемое объявление типа возврата (начиная с PHP 7.1)
:
Альтернативный синтаксис для структур управления, Троичный оператор
::
Оператор разрешения области
=>
Массивы
<=>
Операторы сравнения (начиная с PHP 7.0)
+
Арифметические Операторы, Операторы массива
+=
а также -=
Операторы присваивания
++
а также --
Увеличение / Уменьшение Операторов
[]
Массивы (короткий синтаксис начиная с PHP 5.4)
$var = []
пустой массив...
Аргумент распаковывается (начиная с PHP 5.6)
**
Возведение (начиная с PHP 5.6)
#
Однострочный комментарий в стиле оболочки
Увеличение / Уменьшение Операторов
++
оператор приращения
--
оператор декремента
Example Name Effect
---------------------------------------------------------------------
++$a Pre-increment Increments $a by one, then returns $a.
$a++ Post-increment Returns $a, then increments $a by one.
--$a Pre-decrement Decrements $a by one, then returns $a.
$a-- Post-decrement Returns $a, then decrements $a by one.
Они могут идти до или после переменной.
Если поставить перед переменной, операция увеличения / уменьшения выполняется для переменной первый тогда результат возвращается. Если поставить после переменной, переменная первый возвращается, то операция увеличения / уменьшения выполняется.
Например:
$apples = 10;
for ($i = 0; $i < 10; ++$i) {
echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}
В случае выше ++$i
используется, так как это быстрее. $i++
будет иметь такие же результаты.
Предварительное увеличение немного быстрее, потому что оно действительно увеличивает переменную и после этого «возвращает» результат. Постинкремент создает специальную переменную, копирует туда значение первой переменной и только после использования первой переменной заменяет ее значение на второе.
Тем не менее, вы должны использовать $apples--
, так как сначала вы хотите отобразить текущее количество яблок, и затем Вы хотите вычесть один из них.
Вы также можете увеличивать буквы в PHP:
$i = "a";
while ($i < "c") {
echo $i++;
}
однажды z
достигнут aa
рядом и так далее.
Обратите внимание, что символьные переменные можно увеличивать, но не уменьшать, и даже в этом случае поддерживаются только простые символы ASCII (a-z и A-Z).
Сообщения переполнения стека:
Что немного? Бит представляет собой 1 или 0. В основном OFF (0) и ON (1)
Что такое байт? Байт состоит из 8 битов, а наибольшее значение байта равно 255, что означает, что установлен каждый бит. Посмотрим, почему максимальное значение байта равно 255.
-------------------------------------------
| 1 Byte ( 8 bits ) |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|
-------------------------------------------
Это представление 1 байт
1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 (1 байт)
&
$a = 9;
$b = 10;
echo $a & $b;
Это вывело бы число 8. Почему? Хорошо, давайте посмотрим на нашем примере таблицы.
-------------------------------------------
| 1 Byte ( 8 bits ) |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|
-------------------------------------------
| $a | 0| 0| 0| 0| 1| 0| 0| 1|
-------------------------------------------
| $b | 0| 0| 0| 0| 1| 0| 1| 0|
-------------------------------------------
| & | 0| 0| 0| 0| 1| 0| 0| 0|
-------------------------------------------
Таким образом, вы можете видеть из таблицы, что единственный бит, которым они делятся, это 8 бит.
Второй пример
$a = 36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111
Два общих бита — 32 и 4, которые при сложении вместе возвращают 36.
|
$a = 9;
$b = 10;
echo $a | $b;
Это вывело бы число 11. Почему?
-------------------------------------------
| 1 Byte ( 8 bits ) |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|
-------------------------------------------
| $a | 0| 0| 0| 0| 1| 0| 0| 1|
-------------------------------------------
| $b | 0| 0| 0| 0| 1| 0| 1| 0|
-------------------------------------------
| | | 0| 0| 0| 0| 1| 0| 1| 1|
-------------------------------------------
Вы заметите, что у нас установлено 3 бита в столбцах 8, 2 и 1. Сложите их: 8 + 2 + 1 = 11.
Символ подчеркивания ‘_’, как в _()
это псевдоним gettext()
функция.
Syntax Name Description
x == y Equality True if x and y have the same key/value pairs
x != y Inequality True if x is not equal to y
x === y Identity True if x and y have the same key/value pairs
in the same order and of the same types
x !== y Non-identity True if x is not identical to y
++ x Pre-increment Increments x by one, then returns x
x ++ Post-increment Returns x, then increments x by one
-- x Pre-decrement Decrements x by one, then returns x
x -- Post-decrement Returns x, then decrements x by one
x and y And True if both x and y are true x=6 y=3
(x < 10 and y > 1) returns true
x && y And True if both x and y are true x=6 y=3
(x < 10 && y > 1) returns true
a . b Concatenation Concatenate two strings: "Hi" . "Ha"
оператор космического корабля <=>
это последний оператор сравнения, добавленный в PHP 7. Это неассоциативным бинарный оператор с тем же приоритетом, что и операторы равенства (==
, !=
, ===
, !==
). Этот оператор позволяет упростить трехстороннее сравнение между левым и правым операндами.
Оператор приводит к целочисленному выражению:
0
когда оба операнда равны0
когда левый операнд меньше правого операнда0
когда левый операнд больше правого операнданапример
1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1
Хорошее практическое применение этого оператора — обратные вызовы типа сравнения, которые, как ожидается, будут возвращать нулевое, отрицательное или положительное целое число на основе трехстороннего сравнения между двумя значениями. Функция сравнения передана usort
один из таких примеров.
$arr = [4,2,1,3];
usort($arr, function ($a, $b) {
if ($a < $b) {
return -1;
} elseif ($a > $b) {
return 1;
} else {
return 0;
}
});
$arr = [4,2,1,3];
usort($arr, function ($a, $b) {
return $a <=> $b;
});
Магические константыХотя это не просто символы, но важная часть этого семейства. Есть восемь магических констант, которые меняются в зависимости от того, где они используются.
__LINE__
: Текущий номер строки файла.
__FILE__
: Полный путь и имя файла. Если используется внутри включения, возвращается имя включенного файла. Начиная с PHP 4.0.2, __FILE__
всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в более старых версиях он содержал относительный путь при некоторых обстоятельствах.
__DIR__
: Каталог файла. Если используется внутри включения, возвращается каталог включенного файла. Это эквивалентно dirname(__FILE__)
, Это имя каталога не имеет косой черты, если только оно не является корневым каталогом. (Добавлено в PHP 5.3.0.)
__FUNCTION__
: Имя функции. (Добавлено в PHP 4.3.0) Начиная с PHP 5, эта константа возвращает имя функции в том виде, в котором она была объявлена (с учетом регистра). В PHP 4 его значение всегда в нижнем регистре.
__CLASS__
: Имя класса. (Добавлено в PHP 4.3.0) Начиная с PHP 5 эта константа возвращает имя класса в том виде, в котором оно было объявлено (с учетом регистра). В PHP 4 его значение всегда в нижнем регистре. Имя класса включает пространство имен, в котором оно было объявлено (например, Foo\Bar
). Обратите внимание, что начиная с PHP 5.4 __CLASS__
работает также в чертах. При использовании в методе черт, __CLASS__
Имя класса, в котором используется черта.
__TRAIT__
: Имя черты. (Добавлено в PHP 5.4.0) Начиная с PHP 5.4, эта константа возвращает признак в том виде, в котором он был объявлен (с учетом регистра). Имя признака включает пространство имен, в котором оно было объявлено (например, Foo\Bar
).
__METHOD__
: Имя метода класса. (Добавлено в PHP 5.0.0) Имя метода возвращается в том виде, в котором оно было объявлено (с учетом регистра).
__NAMESPACE__
: Имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (добавлено в PHP 5.3.0).
instanceof
используется для определения того, является ли переменная PHP экземпляром объекта определенного класса.
<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);
Приведенный выше пример выведет:
bool(true)
bool(false)
Причина: Пример выше $a
является объектом mclass
так что используйте только mclass
данные не экземпляр с sclass
<?php
class pclass { }
class childclass extends pclass { }
$a = new childclass;
var_dump($a instanceof childclass);
var_dump($a instanceof pclass);
Приведенный выше пример выведет:
bool(true)
bool(true)
<?php
class cloneable { }
$a = new cloneable;
$b = clone $a;
var_dump($a instanceof cloneable);
var_dump($b instanceof cloneable);
Приведенный выше пример выведет:
bool(true)
bool(true)
and
оператор и or
оператор имеет более низкий приоритет, чем оператор присваивания =
,
Это означает, что $a = true and false;
эквивалентно ($a = true) and false
,
В большинстве случаев вы, вероятно, захотите использовать &&
а также ||
, которые ведут себя так, как известно из языков, таких как C, Java или JavaScript.