PHP Шпаргалки: различия между версиями
AE (обсуждение | вклад) (→Приведение типов: Оптимизация) |
AE (обсуждение | вклад) (→Приведение типов: Правки) |
||
Строка 118: | Строка 118: | ||
| "NULL" | | "NULL" | ||
| | | false | ||
| int(0) | | int(0) | ||
Строка 124: | Строка 124: | ||
| float(0) | | float(0) | ||
| | | <code>""</code> | ||
| [] | | [ ] | ||
| {}* | | { }** | ||
|- | |- | ||
! true | ! true | ||
| "boolean" | | "boolean" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 138: | Строка 138: | ||
| float(1) | | float(1) | ||
| | | "1" | ||
| [true] | | [true] | ||
| {"scalar":true}* | | {"scalar":true}** | ||
|- | |- | ||
! false | ! false | ||
| "boolean" | | "boolean" | ||
| | | false | ||
| int(0) | | int(0) | ||
Строка 152: | Строка 152: | ||
| float(0) | | float(0) | ||
| | | <code>""</code> | ||
| [false] | | [false] | ||
| {"scalar":false}* | | {"scalar":false}** | ||
|- | |- | ||
! 0 | ! 0 | ||
| "integer" | | "integer" | ||
| | | false | ||
| int(0) | | int(0) | ||
Строка 166: | Строка 166: | ||
| float(0) | | float(0) | ||
| | | "0" | ||
| [0] | | [0] | ||
| {"scalar":0}* | | {"scalar":0}** | ||
|- | |- | ||
! 1 | ! 1 | ||
| "integer" | | "integer" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 180: | Строка 180: | ||
| float(1) | | float(1) | ||
| | | "1" | ||
| [1] | | [1] | ||
| {"scalar":1}* | | {"scalar":1}** | ||
|- | |- | ||
! 1.0 | ! 1.0 | ||
| "double" | | "double" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 194: | Строка 194: | ||
| float(1) | | float(1) | ||
| | | "1" | ||
| [1] | | [1] | ||
| {"scalar":1}* | | {"scalar":1}** | ||
|- | |- | ||
! M_PI | ! M_PI | ||
| "double" | | "double" | ||
| | | true | ||
| int(3) | | int(3) | ||
| float(3. | | float(3.1...) | ||
| "3.14159..." | | "3.14159..." | ||
| [3.14159...] | | [3.14159...] | ||
| {"scalar":3. | | {"scalar":3.141...}** | ||
|- | |- | ||
! INF | ! INF | ||
| "double" | | "double" | ||
| | | true | ||
| int(0) | | int(0) | ||
Строка 222: | Строка 222: | ||
| float(INF) | | float(INF) | ||
| | | '''"INF"''' | ||
| [INF] | | [INF] | ||
| {"scalar":INF}* | | {"scalar":INF}** | ||
|- | |- | ||
Строка 232: | Строка 232: | ||
| "double" | | "double" | ||
| | | '''true''' | ||
| int(0) | | '''int(0)''' | ||
| float(NAN) | | float(NAN) | ||
| | | '''"NAN"''' | ||
| [NAN] | | [NAN] | ||
| {"scalar":NAN}* | | {"scalar":NAN}** | ||
|- | |- | ||
Строка 248: | Строка 248: | ||
| "string" | | "string" | ||
| | | false | ||
| int(0) | | int(0) | ||
Строка 254: | Строка 254: | ||
| float(0) | | float(0) | ||
| | | <code>""</code> | ||
| [""] | | [<code>""</code>] | ||
| {"scalar":""}* | | {"scalar":<code>""</code>}** | ||
|- | |- | ||
! "0" | ! "0" | ||
| "string" | | "string" | ||
| | | '''false''' | ||
| int(0) | | int(0) | ||
Строка 268: | Строка 268: | ||
| float(0) | | float(0) | ||
| | | "0" | ||
| ["0"] | | ["0"] | ||
| {"scalar":"0"}* | | {"scalar":"0"}** | ||
|- | |- | ||
! "1" | ! "1" | ||
| "string" | | "string" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 282: | Строка 282: | ||
| float(1) | | float(1) | ||
| | | "1" | ||
| ["1"] | | ["1"] | ||
| {"scalar":"1"}* | | {"scalar":"1"}** | ||
|- | |- | ||
! "true" | ! "true" | ||
| "string" | | "string" | ||
| | | true | ||
| int(0) | | '''int(0)''' | ||
| float(0) | | float(0) | ||
| | | "true" | ||
| ["true"] | | ["true"] | ||
| {"scalar":"true"}* | | {"scalar":"true"}** | ||
|- | |- | ||
! "false" | ! "false" | ||
| "string" | | "string" | ||
| | | '''true''' | ||
| int(0) | | int(0) | ||
Строка 310: | Строка 310: | ||
| float(0) | | float(0) | ||
| | | "false" | ||
| ["false"] | | ["false"] | ||
| {"scalar":"false"}* | | {"scalar":"false"}** | ||
|- | |- | ||
! [] | ! [] | ||
| "array" | | "array" | ||
| | | '''false''' | ||
| int(0) | | '''int(0)''' | ||
| float(0) | | float(0) | ||
| style="background-color: #ffff66"| "Array" | | style="background-color: #ffff66" | '''"Array" *''' | ||
| [] | | [ ] | ||
| {}* | | { }** | ||
|- | |- | ||
! [0] | ! [0] | ||
| "array" | | "array" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 351: | Строка 337: | ||
| float(1) | | float(1) | ||
| style="background-color: #ffff66"| "Array" | | style="background-color: #ffff66" | '''"Array" *''' | ||
| [0] | | [0] | ||
| {"0":0}* | | '''{"0":0}**''' | ||
|- | |- | ||
! ["abc"] | ! ["abc"] | ||
| "array" | | "array" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 364: | Строка 350: | ||
| float(1) | | float(1) | ||
| style="background-color: #ffff66"| "Array" | | style="background-color: #ffff66" | '''"Array" *''' | ||
| ["abc"] | | ["abc"] | ||
| {"0":"abc"}* | | '''{"0":"abc"}**''' | ||
|- | |- | ||
! ["a"=>"b"] | ! ["a"=>"b"] | ||
| "array" | | "array" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 377: | Строка 363: | ||
| float(1) | | float(1) | ||
| style="background-color: #ffff66"| "Array" | | style="background-color: #ffff66" | '''"Array" *''' | ||
| ["a"=>"b"] | | ["a"=>"b"] | ||
| {"a":"b"}* | | {"a":"b"}** | ||
|- | |- | ||
! [["a"=>"b"]] | ! [["a"=>"b"]] | ||
| "array" | | "array" | ||
| | | true | ||
| int(1) | | int(1) | ||
Строка 390: | Строка 376: | ||
| float(1) | | float(1) | ||
| style="background-color: #ffff66"| "Array" | | style="background-color: #ffff66" | '''"Array" *''' | ||
| [["a"=>"b]] | | [["a"=>"b]] | ||
| {"0":["a"=>"b"]}* | | {"0":'''["a"=>"b"]'''}** | ||
|- | |- | ||
! new stdClass() | ! new stdClass() | ||
| "object" | | "object" | ||
| | | '''true''' | ||
| style="background-color: #ffff66"| int(1) | | style="background-color: #ffff66" | '''int(1)*''' | ||
| style="background-color: #ffff66"| float(1) | | style="background-color: #ffff66" | float(1)* | ||
| style="background-color: #ff6666"| ERROR! | | style="background-color: #ff6666" | '''ERROR!***''' | ||
| [] | | [ ] | ||
| {}* | | { }** | ||
|- | |- | ||
! | ! <small>Object с методом __toString</small> | ||
< | |||
| "object" | | "object" | ||
| | | true | ||
| style="background-color: #ffff66"| int(1) | | style="background-color: #ffff66" | int(1)* | ||
| style="background-color: #ffff66"| float(1) | | style="background-color: #ffff66" | float(1)* | ||
| " | | "''<small>из __toString</small>''" | ||
| [] | | [<small>''поля из объекта''</small>] | ||
| object( | | ''object(SomeClass)'' | ||
|- | |- | ||
! (function() { yield | ! <small>(function() { yield ...; })()</small> | ||
| "object" | | "object" | ||
| | | true | ||
| style="background-color: #ffff66"| int(1) | | style="background-color: #ffff66" | int(1)* | ||
| style="background-color: #ffff66"| float(1) | | style="background-color: #ffff66" | float(1)* | ||
| style="background-color: #ff6666"| ERROR! | | style="background-color: #ff6666" | '''ERROR!***''' | ||
| [] | | [ ] | ||
| object(Generator) | | ''object(Generator)'' | ||
|- | |- | ||
! fopen(' | ! fopen('xxx', 'r') | ||
| "resource" | | "resource" | ||
| | | true | ||
| int( | | '''int(?)''' | ||
| float( | | '''float(?)''' | ||
| "Resource id # | | "<small>Resource id #?</small>" | ||
| [ | | [<small>''resource…''</small>] | ||
| {"scalar": | | {"scalar":''<small>resource…</small>''} | ||
|- | |- | ||
! Примечания: | ! <sub>Примечания:</sub> | ||
|colspan="2" style="background-color: #ffff66"| E_WARNING | | colspan="2" style="background-color: #ffff66" | <sub>* E_WARNING</sub> | ||
|colspan="3"| * { } - обозначение для object(stdClass) | | colspan="3" | <sub>** { } - обозначение для object(stdClass)</sub> | ||
|colspan="2" style="background-color: #ff6666"| E_RECOVERABLE_ERROR | | colspan="2" style="background-color: #ff6666" | <sub>*** E_RECOVERABLE_ERROR</sub> | ||
|- | |- | ||
|} | |} |
Версия от 00:20, 3 ноября 2022
Операторы
Арифметика | Сравнение | Логические | Побитовые |
---|---|---|---|
+ сложение
|
=== равно
|
&& (and ) и
|
& и
|
- вычитание
|
!== не равно
|
|| (or ) или
|
| или
|
* умножение
|
< меньше
|
! отрицание
|
~ отрицание
|
/ деление
|
> больше
|
xor искл. или
|
^ искл. или
|
% остаток
|
<= меньше или равно
|
<< сдвиг влево
| |
** степень
|
>= больше или равно
|
>> сдвиг вправо
|
Типы данных
Тип | Подтип | Описание | Примеры |
---|---|---|---|
bool | скалярный | булевый тип | true, false |
int | скалярный | целые числа | 15, 017, 0xf, 0b1111 |
float | скалярный | числа с плав. точкой | 0.01, 1e-2 |
string | скалярный | строки | 'abc', "abc" |
array | смешанный | массивы | [1,-0.1,'abc'],
array('key' => 'value') |
object | смешанный | объекты | new stdClass(),
new class {} |
callable | смешанный | можно в callback | function(){},
fn($x) => $x+1 |
iterable | смешанный | можно в foreach | [1,2],
(function() { yield 1; yield 2; })() |
resource | специальный | внешний ресурс | fopen('http://www.google.com', 'r') |
NULL | специальный | нет значения | null |
Приведение типов
$v = ... | gettype($v) | (bool)$v | (int)$v | (float)$v | (string)$v | (array)$v | (object)$v |
---|---|---|---|---|---|---|---|
null | "NULL" | false | int(0) | float(0) | ""
|
[ ] | { }** |
true | "boolean" | true | int(1) | float(1) | "1" | [true] | {"scalar":true}** |
false | "boolean" | false | int(0) | float(0) | ""
|
[false] | {"scalar":false}** |
0 | "integer" | false | int(0) | float(0) | "0" | [0] | {"scalar":0}** |
1 | "integer" | true | int(1) | float(1) | "1" | [1] | {"scalar":1}** |
1.0 | "double" | true | int(1) | float(1) | "1" | [1] | {"scalar":1}** |
M_PI | "double" | true | int(3) | float(3.1...) | "3.14159..." | [3.14159...] | {"scalar":3.141...}** |
INF | "double" | true | int(0) | float(INF) | "INF" | [INF] | {"scalar":INF}** |
NAN | "double" | true | int(0) | float(NAN) | "NAN" | [NAN] | {"scalar":NAN}** |
"" | "string" | false | int(0) | float(0) | ""
|
["" ]
|
{"scalar":"" }**
|
"0" | "string" | false | int(0) | float(0) | "0" | ["0"] | {"scalar":"0"}** |
"1" | "string" | true | int(1) | float(1) | "1" | ["1"] | {"scalar":"1"}** |
"true" | "string" | true | int(0) | float(0) | "true" | ["true"] | {"scalar":"true"}** |
"false" | "string" | true | int(0) | float(0) | "false" | ["false"] | {"scalar":"false"}** |
[] | "array" | false | int(0) | float(0) | "Array" * | [ ] | { }** |
[0] | "array" | true | int(1) | float(1) | "Array" * | [0] | {"0":0}** |
["abc"] | "array" | true | int(1) | float(1) | "Array" * | ["abc"] | {"0":"abc"}** |
["a"=>"b"] | "array" | true | int(1) | float(1) | "Array" * | ["a"=>"b"] | {"a":"b"}** |
[["a"=>"b"]] | "array" | true | int(1) | float(1) | "Array" * | [["a"=>"b]] | {"0":["a"=>"b"]}** |
new stdClass() | "object" | true | int(1)* | float(1)* | ERROR!*** | [ ] | { }** |
Object с методом __toString | "object" | true | int(1)* | float(1)* | "из __toString" | [поля из объекта] | object(SomeClass) |
(function() { yield ...; })() | "object" | true | int(1)* | float(1)* | ERROR!*** | [ ] | object(Generator) |
fopen('xxx', 'r') | "resource" | true | int(?) | float(?) | "Resource id #?" | [resource…] | {"scalar":resource…} |
Примечания: | * E_WARNING | ** { } - обозначение для object(stdClass) | *** E_RECOVERABLE_ERROR |
Объявление типов для строгой типизации
Объявление типов (Type declarations) поддерживается в параметрах функциях, возвращаемых функциями значениях и в свойствах (полях) классов.
Что указываем | В параметрах
функций |
В возвращаемых
значениях |
В свойствах
класса |
Особенности |
---|---|---|---|---|
Имя класса или
интерфейса |
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 |