Ссылка. Что означает этот символ в PHP?
Что это?
Это набор вопросов, которые время от времени возникают о синтаксисе в PHP. Это также Вики Сообщества, поэтому каждый приглашен принять участие в ведении этого списка.
Почему это?
Раньше было сложно найти вопросы об операторах и других синтаксических токенах.
Основная идея состоит в том, чтобы иметь ссылки на существующие вопросы по переполнению стека, чтобы нам было легче ссылаться на них, а не копировать содержимое из руководства по PHP.
Примечание. С января 2013 года переполнение стека поддерживает специальные символы. Просто окружите условия поиска кавычками, например, [php] "==" vs "==="
Что мне здесь делать?
Если кто-то указал на вас кем-то, потому что вы задали такой вопрос, пожалуйста, найдите конкретный синтаксис ниже. Связанные страницы с руководством по PHP вместе со связанными вопросами, скорее всего, ответят на ваш вопрос. Если это так, вам предлагается поднять ответ. Этот список не является заменой помощи, оказанной другими.
Список
Если ваш конкретный токен не указан ниже, вы можете найти его в списке токенов парсера.
&
побитовые операторы или ссылки
=&
Ссылки
&=
Побитовые операторы
&&
Логические операторы
%
Арифметических операторов
!!
Логические Операторы
@
Операторы контроля ошибок
?:
Троичный оператор
??
Нулевой оператор объединения (начиная с PHP 7)
?string
?int
?array
?bool
?float
Объявление типа возвращаемого значения Nullable (начиная с PHP 7.1)
:
Альтернативный синтаксис для структур управления, Тернарный оператор
::
Оператор разрешения области
\
Пространства имен
->
Классы и объекты
=>
Массивы
^
Битовые операторы
>>
Битовые операторы
<<
Битовые операторы
<<<
Heredoc или Nowdoc
=
Операторы присваивания
==
Операторы сравнения
===
Операторы сравнения
!==
Операторы сравнения
!=
Операторы сравнения
<>
Операторы сравнения
<=>
Операторы сравнения (начиная с PHP 7.0)
|
Битовые операторы
||
Логические Операторы
~
Битовые операторы
+
Арифметические операторы, операторы массивов
+=
и -=
Операторы присваивания
++
и --
увеличивающие/уменьшающие операторы
.=
Операторы присваивания
.
Строковые операторы
,
Аргументы функции
,
Объявления переменных
$$
Переменные Переменные
'
Выполнение оператора
<?=
Короткие открытые теги
[]
Массивы (короткий синтаксис начиная с PHP 5.4)
<?
Открытие и закрытие тегов
...
Распаковка аргумента (начиная с PHP 5.6)
**
Экспонирование (начиная с PHP 5.6)
#
Однострочный комментарий в стиле оболочки
:?
Обнуляемые типы возврата
Ответы
Ответ 1
Увеличение/Уменьшение Операторов
++
оператор приращения
--
оператор декремента
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 (az и AZ).
Сообщения:
Ответ 2
Побитовый оператор
Что немного? Бит - это представление 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 байт)
Несколько примеров для лучшего понимания
Оператор "AND": &
$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.
Оператор "Or": |
$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.
Ответ 3
_
Псевдоним для gettext()
Символ подчеркивания '_', как и в _()
является псевдонимом функции gettext()
.
Ответ 4
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"
Ответ 5
<=>
Оператор космического корабля
Добавлено в PHP 7
оператор космического корабля <=>
- это последний оператор сравнения, добавленный в PHP 7. Это неассоциативный бинарный оператор с тем же приоритетом, что и операторы равенства (==
, !=
, ===
, !==
). Этот оператор позволяет упростить трехстороннее сравнение между левым и правым операндами.
Оператор приводит к целочисленному выражению:
0
когда оба операнда равны
- Меньше
0
, когда левый операнд меньше правого операнда
- Больше, чем
0
, когда левый операнд больше правого операнда
например,
1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1
Хорошее практическое применение этого оператора - обратные вызовы типа сравнения, которые, как ожидается, будут возвращать нулевое, отрицательное или положительное целое число на основе трехстороннего сравнения между двумя значениями. Функция сравнения, переданная в usort
, является одним из таких примеров.
До PHP 7 вы писали бы...
$arr = array(4,2,1,3);
usort($arr, function ($a, $b) {
if ($a < $b) {
return -1;
} elseif ($a > $b) {
return 1;
} else {
return 0;
}
});
Начиная с PHP 7 вы можете писать...
$arr = [4,2,1,3];
usort($arr, function ($a, $b) {
return $a <=> $b;
});
Ответ 6
Магические константы. Хотя это не только символы, но и важная часть этого маркерного семейства. Есть восемь магических констант, которые меняются в зависимости от того, где они используются.
__LINE__
: текущий номер строки файла.
__FILE__
: полный путь и имя файла. Если используется внутри include, возвращается имя включенного файла. Начиная с PHP 4.0.2, __FILE__
всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в более старых версиях он содержал относительный путь при некоторых обстоятельствах.
__DIR__
: каталог файла. Если используется внутри include, возвращается каталог включенного файла. Это эквивалентно 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__
работает также в чертах. При использовании в методе trait, __CLASS__
- это имя класса, в котором используется признак.
__TRAIT__
: Имя признака. (Добавлено в PHP 5.4.0). Начиная с PHP 5.4 эта константа возвращает признак, поскольку он был объявлен (чувствителен к регистру). Имя признака включает пространство имен, в котором оно было объявлено (например, Foo\Bar
).
__METHOD__
: Имя метода класса. (Добавлено в PHP 5.0.0) Имя метода возвращается, поскольку оно было объявлено (с учетом регистра).
__NAMESPACE__
: имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (добавлено в PHP 5.3.0).
Источник
Ответ 7
Операторы типов
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)
Ответ 8
- $ a && $ b: ИСТИНА, если оба $ a и $ b являются TRUE.
- $ a || $ b: TRUE, если либо $ a, либо $ b TRUE.
- $ a xor $ b: ИСТИНА, если либо $ a, либо $ b TRUE, но не оба.
- ! $ a: ИСТИНА, если $ a не является ИСТИНА.
- $ a и $ b: TRUE, если оба $ a и $ b являются TRUE.
- $ a или $ b: TRUE, если значение $ a или $ b равно TRUE.
- $ a == $ b: ИСТИНА, если $ a равно $ b после жонглирования типа.
- $ a === $ b: ИСТИНА, если $ a равно $ b, и они одного типа.
- $ a! = $ b: ИСТИНА, если $ a не равно $ b после манипуляции с типом.
- $ a <> $ b: ИСТИНА, если $ a не равно $ b после манипуляции с типом.
- $ a! == $ b: ИСТИНА, если $ a не равно $ b, или они не одного типа.
- $ a <$ b: ИСТИНА, если $ a строго меньше $ b.
- $ a> $ b: ИСТИНА, если $ a строго больше $ b.
- $ a <= $ b: ИСТИНА, если $ a меньше или равно $ b.
- $ a> = $ b: ИСТИНА, если $ a больше или равно $ b.
- $ a <=> $ b: Целое число меньше, равно или больше нуля, когда $ a соответственно меньше, равно или больше $ b. Доступно с PHP 7.
- $ a? $ b: $ c: if $ return $ b else return $ c ( тернарный оператор)
- $ a?? $ c: То же, что и $ a? $ a: $ c ( нулевой коалесцирующий оператор - требуется PHP> = 7)
- -$a: Напротив $ a.
- $ a + $ b: сумма $ a и $ b.
- $ a - $ b: Разница $ a и $ b.
- $ a * $ b: Продукт $ a и $ b.
- $ a/$ b: Коэффициент $ a и $ b.
- $ a% $ b: Остаток $ a, деленный на $ b.
- $ a ** $ b: Результат повышения $ a до $ b'th мощности (введенный в PHP 5.6)
- ++$a: Увеличивает $ a на единицу, затем возвращает $ a.
- $a++: возвращает $ a, а затем увеличивает $ a на единицу.
- - -$a: уменьшает $ a на единицу, затем возвращает $ a.
- $a--: возвращает $ a, а затем уменьшает $ a на единицу.
- $ a & $ b: Биты, которые установлены как в $ a, так и в $ b.
- $ a | $ b: Биты, установленные в $ a или $ b, устанавливаются.
- $ a ^ $ b: Биты, которые установлены в $ a или $ b, но не оба установлены.
- ~ $ a: Биты, которые установлены в $ a, не заданы, и наоборот.
- $ a << $ b: сдвиньте биты шагов $ a $ b влево (каждый шаг означает "умножить на два")
- $ a >> $ b: Сдвиньте биты шагов $ a $ b вправо (каждый шаг означает "делить на два")
- $ a. $ b: Конкатенация $ a и $ b.
- $ a + $ b: объединение $ a и $ b.
- $ a == $ b: ИСТИНА, если $ a и $ b имеют одинаковые пары ключ/значение.
- $ a === $ b: ИСТИНА, если $ a и $ b имеют одинаковые пары ключ/значение в том же порядке и одного и того же типа.
- $ a! = $ b: ИСТИНА, если $ a не равно $ b.
- $ a <> $ b: ИСТИНА, если $ a не равно $ b.
- $ a! == $ b: ИСТИНА, если $ a не совпадает с $ b.
- $ a = $ b: значение $ b присваивается $ a
- $ a + = $ b: То же, что $ a = $ a + $ b
- $ a - = $ b: То же, что $ a = $ a - $ b
- $ a * = $ b: То же, что $ a = $ a * $ b
- $ a/= $ b: То же, что $ a = $ a/$ b
- $ a% = $ b: То же, что $ a = $ a% $ b
- $ a ** = $ b: То же, что $ a = $ a ** $ b
- $ a. = $ b: То же, что $ a = $ a. $ б
- $ a & = $ b: То же, что $ a = $ a & $ b
- $ a | = $ b: То же, что $ a = $ a | $ б
- $ a ^ = $ b: То же, что $ a = $ a ^ $ b
- $ a << = $ b: То же, что $ a = $ a << $ b
- $ a >> = $ b: То же, что $ a = $ a >> $ b
Заметка
and
оператор, or
оператор имеет более низкий приоритет, чем оператор присваивания =
.
Это означает, что $a = true and false;
эквивалентно ($a = true) and false
.
В большинстве случаев вы, вероятно, захотите использовать &&
и ||
, которые ведут себя так, как известно из таких языков, как C, Java или JavaScript.
Ответ 9
Оператор космического корабля <=>
(добавлено в PHP 7)
Примеры для оператора <=>
космического корабля (PHP 7, источник: руководство по PHP):
Целые числа, числа с плавающей запятой, строки, массивы и объекты для трехстороннего сравнения переменных.
// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
// Comparison is case-sensitive
echo "B" <=> "a"; // -1
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
// Objects
$a = (object) ["a" => "b"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 0
$a = (object) ["a" => "b"];
$b = (object) ["a" => "c"];
echo $a <=> $b; // -1
$a = (object) ["a" => "c"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 1
// only values are compared
$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 1
Ответ 10
{}
Вставные фигурные скобки
И некоторые слова о последнем сообщении
$x[4] = 'd'; // it works
$x{4} = 'd'; // it works
$echo $x[4]; // it works
$echo $x{4}; // it works
$x[] = 'e'; // it works
$x{} = 'e'; // does not work
$x = [1, 2]; // it works
$x = {1, 2}; // does not work
echo "${x[4]}"; // it works
echo "${x{4}}"; // does not work
echo "{$x[4]}"; // it works
echo "{$x{4}}"; // it works
Ответ 11
Оператор нулевого коалесцирования (??)
Этот оператор был добавлен в PHP 7.0 для обычного случая использования тройного оператора в сочетании с isset()
. Он возвращает свой первый операнд, если он существует, и не является NULL
; в противном случае он возвращает свой второй операнд.
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
Ответ 12
Строки PHP:
Строки PHP могут быть указаны четырьмя способами не только двумя способами:
1) Строки одиночной цитаты:
$string = 'This is my string'; // print This is my string
2) Строки двойной строки:
$str = 'string';
$string = "This is my $str"; // print This is my string
3) Heredoc:
$string = <<<EOD
This is my string
EOD; // print This is my string
4) Nowdoc (начиная с PHP 5.3.0):
$string = <<<'END_OF_STRING'
This is my string
END_OF_STRING; // print This is my string
Ответ 13
Вопрос:
Что означает =>
?
ОТВЕТ:
=>
Является символом, который мы, люди, решили использовать для разделения пар "Key" => "Value"
в ассоциативных массивах.
развивавший:
Чтобы понять это, мы должны знать, что такое ассоциативные массивы. Первое, что приходит, когда обычный программист думает о массиве (в PHP), будет чем-то вроде:
$myArray1 = array(2016, "hello", 33);//option 1
$myArray2 = [2016, "hello", 33];//option 2
$myArray3 = [];//option 3
$myArray3[] = 2016;
$myArray3[] = "hello";
$myArray3[] = 33;
Если as, если бы мы хотели вызвать массив в некоторой более поздней части кода, мы могли бы сделать:
echo $myArray1[1];// output: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello
Пока все хорошо. Однако, как люди, нам может быть трудно запомнить, что индекс [0]
для массива - это значение year 2016, индекс [1]
для массива - это приветствия, а индекс [2]
массива - это простое целочисленное значение. Альтернативой, которую мы должны были бы использовать, является использование так называемого Ассоциативного массива. Ассоциативный массив имеет несколько отличий от Sequential Array
(это то, что было в предыдущих случаях, поскольку они увеличивают индекс, используемый в заданной последовательности, путем увеличения на 1 для каждого следующего значения).
Различия (между последовательным и ассоциативным массивом):
-
Завершая объявление ассоциативного массива, вы не только включаете value
того, что хотите помещать в массив, но также ставите значение индекса (называемое key
), которое вы хотите использовать при вызове массива в последующих частях кода. Во время объявления используется следующий синтаксис: "Key" => "Value"
.
-
При использовании Ассоциативного массива значение key
затем будет помещено внутри индекса массива для получения желаемого value
.
Например:
$myArray1 = array(
"Year" => 2016,
"Greetings" => "hello",
"Integer_value" => 33);//option 1
$myArray2 = [
"Year" => 2016,
"Greetings" => "hello",
"Integer_value" => 33];//option 2
$myArray3 = [];//option 3
$myArray3["Year"] = 2016;
$myArray3["Greetings"] = "hello";
$myArray3["Integer_value"] = 33;
И теперь, чтобы получить тот же результат, что и раньше, значение key
будет использоваться в индексе массивов:
echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello
ЗАКЛЮЧИТЕЛЬНАЯ ТОЧКА:
Итак, из приведенного выше примера довольно легко видеть, что символ =>
используется для выражения отношения ассоциативного массива между каждой из пар key
и value
в массиве DURING инициирование значений внутри массива.
Ответ 14
Вопрос
Что значит "&" означает здесь в PHP?
PHP "&" оператор
Делает жизнь проще, когда мы привыкнем к ней. (внимательно посмотрите пример ниже)
& обычно проверяет биты, которые установлены как в $a, так и в $b.
Вы даже заметили, как работают эти вызовы?
error_reporting(E_ERROR | E_WARNING | E_PARSE);
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL);
Итак, за всем выше стоит игра побитового оператора и бит.
Одним из полезных примеров является простая конфигурация, как показано ниже, поэтому одно целое поле может хранить тысячи комбо для вас.
Большинство людей уже прочитали документы, но не привязали реальный случай использования этих побитовых операторов.
Пример, что вы будете любить
<?php
class Config {
// our constants must be 1,2,4,8,16,32,64 ....so on
const TYPE_CAT=1;
const TYPE_DOG=2;
const TYPE_LION=4;
const TYPE_RAT=8;
const TYPE_BIRD=16;
const TYPE_ALL=31;
private $config;
public function __construct($config){
$this->config=$config;
if($this->is(Config::TYPE_CAT)){
echo 'cat ';
}
if($this->is(Config::TYPE_DOG)){
echo 'dog ';
}
if($this->is(Config::TYPE_RAT)){
echo 'rat ';
}
if($this->is(Config::TYPE_LION)){
echo 'lion ';
}
if($this->is(Config::TYPE_BIRD)){
echo 'bird ';
}
echo "\n";
}
private function is($value){
return $this->config & $value;
}
}
new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird
Ответ 15
==
используется для проверки равенства без учета переменной типа данных
===
используется для проверки равенства для как переменной значения, так и типа данных
Пример
$a = 5
if ($a == 5)
- оценит как истинное
if ($a == '5')
- примет значение true, потому что при сравнении обоих значений PHP внутренне преобразует это строковое значение в целое, а затем сравнивает оба значения
if ($a === 5)
- оценит как истинное
if ($a === '5')
- оценивается как ложное, потому что значение равно 5, но это значение 5 не является целым числом.
Ответ 16
Оператор Null Coalesce php
Нулевой коалесцирующий оператор (??) был добавлен в PHP7 для общего случая использования тройной связи с isset(). Он возвращает свой первый операнд, если он существует и не является NULL, иначе он возвращает свой второй операнд, например, следующий пример:
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
Ответ 17
Оператор Null Coalesce "??" (Добавлено в PHP 7)
Не самое запоминающееся имя для оператора, но PHP 7 приносит довольно удобный нулевой коалесент, поэтому я решил поделиться с ним примером.
В PHP 5 у нас уже есть тернарный оператор, который проверяет значение, а затем возвращает второй элемент, если он возвращает true, а третий - если:
echo $count ? $count : 10; // outputs 10
Существует также сокращение для того, что позволяет пропустить второй элемент, если он будет таким же, как первый: echo $count?: 10;//также выводит 10
В PHP 7 мы дополнительно получаем оператор, который вместо того, чтобы указывать на чрезвычайную путаницу, которая, как я обычно использовал два вопросительных знака, вместо этого позволяет нам объединить цепочку значений. Чтение слева направо, первое значение, которое существует и не равно null, - это значение, которое будет возвращено.
// $a is not set
$b = 16;
echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16
Эта конструкция полезна для указания приоритета одному или нескольким значениям, идущим, возможно, из пользовательского ввода или существующей конфигурации и безопасному возврату к заданному по умолчанию, если эта конфигурация отсутствует. Это своего рода небольшая функция, но я знаю, что буду использовать, как только мои приложения перейдут на PHP 7.
Ответ 18
Здесь указаны имена всех операторов PHP (TOKEN).
Ссылка http://php.net/manual/en/tokens.php
![enter image description here]()
Ответ 19
Обнуляемое объявление типа возврата
В PHP 7 добавлена поддержка объявлений возвращаемых типов. Аналогично объявлениям типа аргумента, декларации возвращаемого типа определяют тип значения, которое будет возвращено из функции. Для объявлений возвращаемого типа доступны те же типы, что и для объявлений типов аргументов.
Строгая типизация также влияет на объявления возвращаемого типа. В слабом режиме по умолчанию возвращаемые значения будут приводиться к правильному типу, если они еще не относятся к этому типу. В сильном режиме возвращаемое значение должно быть правильного типа, в противном случае выдается ошибка TypeError.
Начиная с PHP 7.1.0, возвращаемые значения могут быть помечены как обнуляемые, если перед именем типа ставить знак вопроса (?). Это означает, что функция возвращает либо указанный тип, либо NULL.
<?php
function get_item(): ?string {
if (isset($_GET['item'])) {
return $_GET['item'];
} else {
return null;
}
}
?>
Источник
Ответ 20
Три точки в качестве оператора Splat (...) (начиная с PHP 5.6)
В PHP есть оператор "..." (три точки), который называется оператором Splat. Он используется для передачи произвольного числа параметров в функцию, и этот тип функции называется Variadic Functions. Давайте возьмем примеры использования "..." (три точки).
Example 1:
<?php
function calculateNumbers(...$params){
$total = 0;
foreach($params as $v){
$total = $total + $v;
}
return $total;
}
echo calculateNumbers(10, 20, 30, 40, 50);
//Output 150
?>
Каждый аргумент функции calcNumbers() передается через $ params в виде массива при использовании "…".
Есть много разных способов использовать оператор "…". Ниже приведены несколько примеров:
Example 2:
<?php
function calculateNumbers($no1, $no2, $no3, $no4, $no5){
$total = $no1 + $no2 + $no3 + $no4 + $no5;
return $total;
}
$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers(...$numbers);
//Output 150
?>
Example 3:
<?php
function calculateNumbers(...$params){
$total = 0;
foreach($params as $v){
$total = $total + $v;
}
return $total;
}
$no1 = 70;
$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers($no1, ...$numbers);
//Output 220
?>
Example 4:
<?php
function calculateNumbers(...$params){
$total = 0;
foreach($params as $v){
$total = $total + $v;
}
return $total;
}
$numbers1 = array(10, 20, 30, 40, 50);
$numbers2 = array(100, 200, 300, 400, 500);
echo calculateNumbers(...$numbers1, ...$numbers2);
//Output 1650
?>