PHP Шпаргалки: различия между версиями

Материал из Изи Вики
(→‎Типы ошибок: Добавлены цвета)
Нет описания правки
 
(не показаны 2 промежуточные версии этого же участника)
Строка 47: Строка 47:
!Описание
!Описание
!Примеры
!Примеры
!Приведение к
!Проверка на
|-
|-
|bool
|bool
Строка 52: Строка 54:
|булевый тип
|булевый тип
|true, false
|true, false
|(bool) $v
|is_bool($v)
|-
|-
|int
|int
Строка 57: Строка 61:
|целые числа
|целые числа
|15, 017, 0xf, 0b1111
|15, 017, 0xf, 0b1111
|(int) $v
|is_int($v)
|-
|-
|float
|float
Строка 62: Строка 68:
|числа с плав. точкой
|числа с плав. точкой
|0.01, 1e-2
|0.01, 1e-2
|(float) $v
|is_float($v)
|-
|-
|string
|string
Строка 67: Строка 75:
|строки
|строки
|'abc', "abc"
|'abc', "abc"
|(string) $v
|is_string($v)
|-
|-
|array
|array
Строка 73: Строка 83:
|[1,-0.1,'abc'],  
|[1,-0.1,'abc'],  
array('key' => 'value')
array('key' => 'value')
|(array) $v
|is_array($v)
|-
|-
|object
|object
Строка 79: Строка 91:
|new stdClass(),
|new stdClass(),
new class {}
new class {}
|(object) $v
|is_object($v)
|-
|-
|callable
|callable
Строка 85: Строка 99:
|function(){},
|function(){},
fn($x) => $x+1
fn($x) => $x+1
| -
|is_callable($v)
|-
|-
|iterable
|iterable
Строка 91: Строка 107:
|[1,2],
|[1,2],
(function() { yield 1; yield 2; })()
(function() { yield 1; yield 2; })()
| -
|is_iterable($v)
|-
|-
|resource
|resource
Строка 96: Строка 114:
|внешний ресурс
|внешний ресурс
|fopen('<nowiki>http://www.google.com'</nowiki>, 'r')
|fopen('<nowiki>http://www.google.com'</nowiki>, 'r')
| -
|is_resource($v)
|-
|-
|NULL
|NULL
Строка 101: Строка 121:
|нет значения
|нет значения
|null
|null
| -
|is_null($v)
|}
|}


Строка 1438: Строка 1460:
|-
|-
|}
|}
[[Категория:Шпаргалки]]

Текущая версия от 16:54, 12 ноября 2022

Операторы[править | править код]

Операторы
Арифметика Сравнение Логические Побитовые
+ сложение === равно && (and) и & и
- вычитание !== не равно || (or) или | или
* умножение < меньше ! отрицание ~ отрицание
/ деление > больше xor искл. или ^ искл. или
% остаток <= меньше или равно << сдвиг влево
** степень >= больше или равно >> сдвиг вправо

Типы данных[править | править код]

Типы данных
Тип Подтип Описание Примеры Приведение к Проверка на
bool скалярный булевый тип true, false (bool) $v is_bool($v)
int скалярный целые числа 15, 017, 0xf, 0b1111 (int) $v is_int($v)
float скалярный числа с плав. точкой 0.01, 1e-2 (float) $v is_float($v)
string скалярный строки 'abc', "abc" (string) $v is_string($v)
array смешанный массивы [1,-0.1,'abc'],

array('key' => 'value')

(array) $v is_array($v)
object смешанный объекты new stdClass(),

new class {}

(object) $v is_object($v)
callable смешанный можно в callback function(){},

fn($x) => $x+1

- is_callable($v)
iterable смешанный можно в foreach [1,2],

(function() { yield 1; yield 2; })()

- is_iterable($v)
resource специальный внешний ресурс fopen('http://www.google.com', 'r') - is_resource($v)
NULL специальный нет значения null - is_null($v)

Типы ошибок[править | править код]

Значение Константа Выполнение

прерывается

Описание
1 E_ERROR Да Фатальные неустранимые ошибки во время выполнения.
2 E_WARNING Нет Не фатальные предупреждения во время выполнения.
4 E_PARSE Да Ошибки на этапе компиляции. Невозможность обработать исходный код.
8 E_NOTICE Нет Уведомление с указанием на возможную ошибку.
16 E_CORE_ERROR Да Фатальные ошибки ядра PHP.
32 E_CORE_WARNING Нет Предупреждения ядра PHP.
64 E_COMPILE_ERROR Да Фатальные ошибки на этапе компиляции от движка Zend.
128 E_COMPILE_WARNING Нет Предупреждения на этапе компиляции от движка Zend.
256 E_USER_ERROR Да Фатальные ошибки, вызванные пользователем через trigger_error().
512 E_USER_WARNING Нет Предупреждения, вызванные пользователем через trigger_error().
1024 E_USER_NOTICE Нет Уведомления, вызванные пользователем через trigger_error().
2048 E_STRICT Нет Предложения для лучшей совместимости с новыми версиями PHP
4096 E_RECOVERABLE_ERROR Да Фатальные ошибки с возможностью обработки с помощью set_error_handler().
8192 E_DEPRECATED Нет Уведомления о коде, который не будет работать в следующих версиях PHP.
16384 E_USER_DEPRECATED Нет Уведомления о устаревшем функционале, вызванные пользователем через trigger_error()
32767 E_ALL - Все типы ошибок, предупреждений и уведомлений.

Полезный калькулятор ошибок https://maximivanov.github.io/php-error-reporting-calculator/

Приведение типов[править | править код]

Примеры приведения типов в PHP 8+
$v = ... Тип gettype($v) (bool)$v (int)$v (float)$v (string)$v (array)$v (object)$v
null NULL "NULL" false int(0) float(0) "" [ ] { }**
true bool "boolean" true int(1) float(1) "1" [0=>true] {"scalar":true}**
false bool "boolean" false int(0) float(0) "" [0=>false] {"scalar":false}**
0 int "integer" false int(0) float(0) "0" [0=>0] {"scalar":0}**
1 int "integer" true int(1) float(1) "1" [0=>1] {"scalar":1}**
1.99 float "double" true int(1)*** float(1.99) "1.99" [0=>1.99] {"scalar":1.99}**
M_PI float "double" true int(3) float(3.1...) "3.14159..." [0=>3.14159...] {"scalar":3.141...}**
INF float "double" true int(0) float(INF) "INF" [0=>INF] {"scalar":INF}**
NAN float "double" true int(0) float(NAN) "NAN" [0=>NAN] {"scalar":NAN}**
"" string "string" false int(0) float(0) "" [0=>""] {"scalar":""}**
"0" string "string" false int(0) float(0) "0" [0=>"0"] {"scalar":"0"}**
"1" string "string" true int(1) float(1) "1" [0=>"1"] {"scalar":"1"}**
"true" string "string" true int(0) float(0) "true" [0=>"true"] {"scalar":"true"}**
"false" string "string" true int(0) float(0) "false" [0=>"false"] {"scalar":"false"}**
[ ] array "array" false int(0) float(0) "Array" * [ ] { }**
[1,2] array "array" true int(1) float(1) "Array" * [0=>1,1=>2] {"0":1,"1":2}**
["3"=>"a","B",4=>"c"] array "array" true int(1) float(1) "Array" * [3=>"a",4=>"c"] {"3":"a","4":"c"}**
["a"=>"b","b"] array "array" true int(1) float(1) "Array" * ["a"=>"b",0=>"b"] {"a":"b","0":"b"}**
[["a"=>"b"]] array "array" true int(1) float(1) "Array" * [["a"=>"b]] {"0":["a"=>"b"]}**
new stdClass() object "object" true int(1)* float(1)* Fatal error [ ] { }**
Object с методом __toString object "object" true int(1)* float(1)* "из __toString" [поля из объекта] object(SomeClass)
fn($x) => $x+1 callable "object" true int(1)* float(1)* Fatal error [object(Closure)] object(Closure)
(function() { yield ...; })() iterable "object" true int(1)* float(1)* Fatal error [ ] object(Generator)
fopen('xxx', 'r') resource "resource" true int(?) float(?) "Resource id #?" [resource…] {"scalar":resource…}
Примечания: * E_WARNING ** { } - обозначение для object(stdClass) *** округление в меньшую сторону

До версии PHP < 7.3 при приведении массива к объекту ключи оставались цифрами: {0:1} вместо {"0":1}. До версии 8.0 типы ошибок были менее строгие. В остальном в старых версиях приведение работает аналогично.

Объявление типов для строгой типизации[править | править код]

Объявление типов (Type declarations) поддерживается в параметрах функциях, возвращаемых функциями значениях и в свойствах (полях) классов.

В каких версиях PHP добавлен функционал
Что указываем В параметрах

функций

В возвращаемых

значениях

В свойствах

класса

Особенности
Имя класса или

интерфейса

5.0 7.0 7.4
self 5.0 7.0 7.4 Объект текущего класса. Может использоваться только в классах
parent 5.0 7.0 7.4 Объект родительского класса. Может использоваться только в классах
array 5.1 7.0 7.4
callable 5.4 7.0 - Нельзя использовать для свойств класса
bool 7.0 7.0 7.4
float 7.0 7.0 7.4
int 7.0 7.0 7.4
string 7.0 7.0 7.4
iterable 7.1 7.1 7.4 Массив или объект, реализующий интерфейс Traversable
?xxxxx 7.1 7.1 7.4 Значение может быть xxxxx или null
void - 7.1 - Функция ничего не возвращает
object 7.2 7.2 7.4
xx|yy|zz 8.0 8.0 8.0 Объединение типов, должен подходить любой один из указанных
null - - - Добавлен в 8.0. Псевдотип, может использоваться только для объединений xx|yy|null
false - - - Добавлен в 8.0. Псевдотип, может использоваться только для объединений xx|yy|false
mixed 8.0 8.0 8.0 То же самое, что object|resource|array|string|int|float|bool|null
static 8.0 8.0 8.0 Объект текущий класса или любого дочернего
xx&yy&zz 8.1 8.1 8.1 Пересечение типов, все должны подходить. Актуально для названия классов и интерфейсов.
never - 8.1 - Функция может прервать выполнения программы

Примечание: не забудьте добавить в php файл declare(strict_types=1); , если вы используйте подход строгой типизации и не хотите чтобы значения неявно приводились к указанным вами типам.

Гибкое сравнение с помощью ==[править | править код]

Результат выполнения гибкого сравнения с помощью ==
== true 1 '1' '1.0' '1e0' '1.0a' -1 [0] NAN 'abc' '0a' '0' [] "" null 0 false
true true true true true true true true true true true true false false false false false false
1 true true true true true false* false false false false false false false false false false false
'1' true true true true true false false false false false false false false false false false false
'1.0' true true true true true false false false false false false false false false false false false
'1e0' true true true true true false false false false false false false false false false false false
'1.0a' true false* false false false true false false false false false false false false false false false
-1 true false false false false false true false false false false false false false false false false
[0] true false false false false false false true false false false false false false false false false
NAN true false false false false false false false false false false false false false false false false
'abc' true false false false false false false false false true false false false false false false* false
'0a' true false false false false false false false false false true false false false false false* false
'0' false false false false false false false false false false false true false false false true true
[] false false false false false false false false false false false false true false true false true
"" false false false false false false false false false false false false false true true false* true
null false false false false false false false false false false false false true true true true true
0 false false false false false false false false false false* false* true false false* true true true
false false false false false false false false false false false false true true true true true true
* true до PHP 8.0.0.

Тождественное сравнение с помощью ===[править | править код]

Результат выполнения тождественного сравнения с помощью ===
=== 15 017 0xf 0b1111 1.0 1e0 1.0001 1.0…01 NAN INF 1.8e308 1.8e307 "n" 'n' '\n' "\n" array(1) [1]
15 true true true true false false false false false false false false false false false false false false
017 true true true true false false false false false false false false false false false false false false
0xf true true true true false false false false false false false false false false false false false false
0b1111 true true true true false false false false false false false false false false false false false false
1.0 false false false false true true false true false false false false false false false false false false
1e0 false false false false true true false true false false false false false false false false false false
1.0001 false false false false false false true false false false false false false false false false false false
1.0…01 false false false false true true false true false false false false false false false false false false
NAN false false false false false false false false false false false false false false false false false false
INF false false false false false false false false false true true false false false false false false false
1.8e308 false false false false false false false false false true true false false false false false false false
1.8e307 false false false false false false false false false false false true false false false false false false
"n" false false false false false false false false false false false false true true false false false false
'n' false false false false false false false false false false false false true true false false false false
'\n' false false false false false false false false false false false false false false true false false false
"\n" false false false false false false false false false false false false false false false true false false
array(1) false false false false false false false false false false false false false false false false true true
[1] false false false false false false false false false false false false false false false false true true