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

10 698 байт добавлено ,  16:54, 12 ноября 2022
нет описания правки
(→‎Операторы: Форматирование)
Нет описания правки
 
(не показано 18 промежуточных версий 4 участников)
Строка 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)
|}
|}
== Типы ошибок ==
{| class="wikitable"
|Значение
|Константа
|Выполнение
прерывается
|Описание
|-
|1
|'''<code>E_ERROR</code>'''
|style="background-color: #ff6666"|Да
|Фатальные неустранимые ошибки во время выполнения.
|-
|2
|'''<code>E_WARNING</code>'''
|style="background-color: #ffff66"|Нет
|Не фатальные предупреждения во время выполнения.
|-
|4
|'''<code>E_PARSE</code>'''
|style="background-color: #ff6666"|Да
|Ошибки на этапе компиляции. Невозможность обработать исходный код.
|-
|8
|'''<code>E_NOTICE</code>'''
|Нет
|Уведомление с указанием на возможную ошибку.
|-
|16
|'''<code>E_CORE_ERROR</code>'''
|style="background-color: #ff6666"|Да
|Фатальные ошибки ядра PHP.
|-
|32
|'''<code>E_CORE_WARNING</code>'''
|style="background-color: #ffff66"|Нет
|Предупреждения ядра PHP.
|-
|64
|'''<code>E_COMPILE_ERROR</code>'''
|style="background-color: #ff6666"|Да
|Фатальные ошибки на этапе компиляции от движка Zend.
|-
|128
|'''<code>E_COMPILE_WARNING</code>'''
|style="background-color: #ffff66"|Нет
|Предупреждения на этапе компиляции от движка Zend.
|-
|256
|'''<code>E_USER_ERROR</code>'''
|style="background-color: #ff6666"|Да
|Фатальные ошибки, вызванные пользователем через trigger_error().
|-
|512
|'''<code>E_USER_WARNING</code>'''
|style="background-color: #ffff66"|Нет
|Предупреждения, вызванные пользователем через trigger_error().
|-
|1024
|'''<code>E_USER_NOTICE</code>'''
|Нет
|Уведомления, вызванные пользователем через trigger_error().
|-
|2048
|'''<code>E_STRICT</code>'''
|Нет
|Предложения для лучшей совместимости с новыми версиями PHP
|-
|4096
|'''<code>E_RECOVERABLE_ERROR</code>'''
|style="background-color: #ff6666"|Да
|Фатальные ошибки с возможностью обработки с помощью set_error_handler().
|-
|8192
|'''<code>E_DEPRECATED</code>'''
|Нет
|Уведомления о коде, который не будет работать в следующих версиях PHP.
|-
|16384
|'''<code>E_USER_DEPRECATED</code>'''
|Нет
|Уведомления о устаревшем функционале, вызванные пользователем через trigger_error()
|-
|32767
|'''<code>E_ALL</code>'''
| -
|Все типы ошибок, предупреждений и уведомлений.
|}
Полезный калькулятор ошибок https://maximivanov.github.io/php-error-reporting-calculator/
== Приведение типов ==
{| class="wikitable"
|+ Примеры приведения типов в 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)
| <code>""</code>
| '''[ ]'''
| '''{ }**'''
|-
! true
|bool
| '''"boolean"'''
| true
| int(1)
| float(1)
| "1"
| [0=>true]
| {"scalar":true}**
|-
! false
|bool
| '''"boolean"'''
| false
| int(0)
| float(0)
| <code>""</code>
| [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)
| <code>""</code>
| [0=><code>""</code>]
| {"scalar":<code>""</code>}**
|-
! "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)
| style="background-color: #ffff66" | '''"Array" *'''
| [ ]
| { }**
|-
! [1,2]
|array
| "array"
| true
| int(1)
| float(1)
| style="background-color: #ffff66" | '''"Array" *'''
| [0=>1,1=>2]
| {'''"0"''':1,'''"1"''':2}**
|-
! ["3"=>"a","B",4=>"c"]
|array
| "array"
| true
| int(1)
| float(1)
| style="background-color: #ffff66" | '''"Array" *'''
| '''[3=>"a",4=>"c"]'''
| {'''"3"''':"a",'''"4"''':"c"}**
|-
! ["a"=>"b","b"]
|array
| "array"
| true
| int(1)
| float(1)
| style="background-color: #ffff66" | '''"Array" *'''
| ["a"=>"b",'''0=>'''"b"]
| {"a":"b",'''"0"''':"b"}**
|-
! [["a"=>"b"]]
|array
| "array"
| true
| int(1)
| float(1)
| style="background-color: #ffff66" | '''"Array" *'''
| [["a"=>"b]]
| {"0":'''["a"=>"b"]'''}**
|-
! new stdClass()
|object
| "object"
| '''true'''
| style="background-color: #ffff66" | '''int(1)*'''
| style="background-color: #ffff66" | float(1)*
| style="background-color: #ff6666" | '''Fatal error'''
| [ ]
| { }**
|-
! <small>Object с методом __toString</small>
|object
| "object"
| true
| style="background-color: #ffff66" | int(1)*
| style="background-color: #ffff66" | float(1)*
| "''<small>из __toString</small>''"
| [<small>''поля из объекта''</small>]
| ''object(SomeClass)''
|-
!fn($x) => $x+1
|callable
|'''"object"'''
|true
| style="background-color: #ffff66" | int(1)*
| style="background-color: #ffff66" | float(1)*
| style="background-color: #ff6666" | '''Fatal error'''
|[''<small>object(Closure)</small>'']
|''object(Closure)''
|-
! <small>(function() { yield ...; })()</small>
|iterable
| '''"object"'''
| true
| style="background-color: #ffff66" | int(1)*
| style="background-color: #ffff66" | float(1)*
| style="background-color: #ff6666" | '''Fatal error'''
| [ ]
| ''object(Generator)''
|-
! fopen('xxx', 'r')
|resource
| "resource"
| true
| '''int(?)'''
| '''float(?)'''
| "<small>Resource id #?</small>"
| [<small>''resource…''</small>]
| {"scalar":''<small>resource…</small>''}
|-
! <sub>Примечания:</sub>
| colspan="2" | <sub>* E_WARNING</sub>
| colspan="3" | <sub>** { } - обозначение для object(stdClass)</sub>
| colspan="3" | <sub>*** округление в меньшую сторону</sub>
|-
|}
До версии PHP < 7.3 при приведении массива к объекту ключи оставались цифрами: {0:1} вместо {"0":1}. До версии 8.0 типы ошибок были менее строгие. В остальном в старых версиях приведение работает аналогично.
== Объявление типов для строгой типизации ==
Объявление типов (Type declarations) поддерживается в параметрах функциях, возвращаемых функциями значениях и в свойствах (полях) классов.
{| class="wikitable"
|+В каких версиях 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
|Массив или объект, реализующий интерфейс <code>Traversable</code>
|-
|?xxxxx
|7.1
|7.1
|7.4
|Значение может быть xxxxx или <code>null</code>
|-
|void
| -
|7.1
| -
|Функция ничего не возвращает
|-
|object
|7.2
|7.2
|7.4
|
|-
|<code><nowiki>xx|yy|zz</nowiki></code>
|8.0
|8.0
|8.0
|Объединение типов, должен подходить любой один из указанных
|-
|null
| -
| -
| -
|Добавлен в 8.0. Псевдотип, может использоваться только для объединений <code><nowiki>xx|yy|null</nowiki></code>
|-
|false
| -
| -
| -
|Добавлен в 8.0. Псевдотип, может использоваться только для объединений <code><nowiki>xx|yy|false</nowiki></code>
|-
|mixed
|8.0
|8.0
|8.0
|То же самое, что <code><nowiki>object|resource|array|string|int|float|bool|null</nowiki></code>
|-
|static
|8.0
|8.0
|8.0
|Объект текущий класса или любого дочернего
|-
|<code>xx&yy&zz</code>
|8.1
|8.1
|8.1
|Пересечение типов, все должны подходить. Актуально для названия классов и интерфейсов.
|-
|never
| -
|8.1
| -
|Функция может прервать выполнения программы
|}
Примечание: не забудьте добавить в php файл <code>declare(strict_types=1);</code> , если вы используйте подход строгой типизации и не хотите чтобы значения '''неявно''' приводились к указанным вами типам.


== Гибкое сравнение с помощью == ==
== Гибкое сравнение с помощью == ==
Строка 840: Строка 1460:
|-
|-
|}
|}
[[Категория:Шпаргалки]]