PHP Шпаргалки: различия между версиями
AE (обсуждение | вклад) (Приведение типов) |
AE (обсуждение | вклад) |
||
Строка 104: | Строка 104: | ||
== Приведение типов == | == Приведение типов == | ||
{| class="wikitable" | |||
|+ Примеры приведения типов | |||
! $v = ... | |||
! gettype($v) | |||
! (bool)$v | |||
! (int)$v | |||
! (float)$v | |||
! (string)$v | |||
! (array)$v | |||
! (object)$v | |||
|- | |||
! null | |||
| string(4) "NULL" | |||
| bool(false) | |||
| int(0) | |||
| float(0) | |||
| string(0) "" | |||
| [] | |||
| {} | |||
|- | |||
! true | |||
| string(7) "boolean" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| string(1) "1" | |||
| [true] | |||
| {"scalar":true} | |||
|- | |||
! false | |||
| string(7) "boolean" | |||
| bool(false) | |||
| int(0) | |||
| float(0) | |||
| string(0) "" | |||
| [false] | |||
| {"scalar":false} | |||
|- | |||
! 0 | |||
| string(7) "integer" | |||
| bool(false) | |||
| int(0) | |||
| float(0) | |||
| string(1) "0" | |||
| [0] | |||
| {"scalar":0} | |||
|- | |||
! 1 | |||
| string(7) "integer" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| string(1) "1" | |||
| [1] | |||
| {"scalar":1} | |||
|- | |||
! 1.0 | |||
| string(6) "double" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| string(1) "1" | |||
| [1] | |||
| {"scalar":1} | |||
|- | |||
! M_PI | |||
| string(6) "double" | |||
| bool(true) | |||
| int(3) | |||
| float(3.141592653589793) | |||
| string(15) "3.1415926535898" | |||
| [3.141592653589793] | |||
| {"scalar":3.141592653589793} | |||
|- | |||
! INF | |||
| string(6) "double" | |||
| bool(true) | |||
| int(0) | |||
| float(INF) | |||
| string(3) "INF" | |||
| array(1) { | |||
[0]=> | |||
float(INF) | |||
} | |||
| object(stdClass)#5 (1) { | |||
["scalar"]=> | |||
float(INF) | |||
} | |||
|- | |||
! NAN | |||
| string(6) "double" | |||
| bool(true) | |||
| int(0) | |||
| float(NAN) | |||
| string(3) "NAN" | |||
| array(1) { | |||
[0]=> | |||
float(NAN) | |||
} | |||
| object(stdClass)#5 (1) { | |||
["scalar"]=> | |||
float(NAN) | |||
} | |||
|- | |||
! "" | |||
| string(6) "string" | |||
| bool(false) | |||
| int(0) | |||
| float(0) | |||
| string(0) "" | |||
| [""] | |||
| {"scalar":""} | |||
|- | |||
! "0" | |||
| string(6) "string" | |||
| bool(false) | |||
| int(0) | |||
| float(0) | |||
| string(1) "0" | |||
| ["0"] | |||
| {"scalar":"0"} | |||
|- | |||
! "1" | |||
| string(6) "string" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| string(1) "1" | |||
| ["1"] | |||
| {"scalar":"1"} | |||
|- | |||
! "true" | |||
| string(6) "string" | |||
| bool(true) | |||
| int(0) | |||
| float(0) | |||
| string(4) "true" | |||
| ["true"] | |||
| {"scalar":"true"} | |||
|- | |||
! "false" | |||
| string(6) "string" | |||
| bool(true) | |||
| int(0) | |||
| float(0) | |||
| string(5) "false" | |||
| ["false"] | |||
| {"scalar":"false"} | |||
|- | |||
! "null" | |||
| string(6) "string" | |||
| bool(true) | |||
| int(0) | |||
| float(0) | |||
| string(4) "null" | |||
| ["null"] | |||
| {"scalar":"null"} | |||
|- | |||
! [] | |||
| string(5) "array" | |||
| bool(false) | |||
| int(0) | |||
| float(0) | |||
| | |||
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 | |||
string(5) "Array" | |||
| [] | |||
| {} | |||
|- | |||
! [0] | |||
| string(5) "array" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| | |||
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 | |||
string(5) "Array" | |||
| [0] | |||
| {"0":0} | |||
|- | |||
! ["abc"] | |||
| string(5) "array" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| | |||
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 | |||
string(5) "Array" | |||
| ["abc"] | |||
| {"0":"abc"} | |||
|- | |||
! ["a"=>"b"] | |||
| string(5) "array" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| | |||
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 | |||
string(5) "Array" | |||
| {"a":"b"} | |||
| {"a":"b"} | |||
|- | |||
! [["a"=>"b"]] | |||
| string(5) "array" | |||
| bool(true) | |||
| int(1) | |||
| float(1) | |||
| | |||
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 | |||
string(5) "Array" | |||
| [{"a":"b"}] | |||
| {"0":{"a":"b"}} | |||
|- | |||
! new stdClass() | |||
| string(6) "object" | |||
| bool(true) | |||
| | |||
Warning: Object of class stdClass could not be converted to int in /home/user/scripts/code.php on line 125 | |||
int(1) | |||
| | |||
Warning: Object of class stdClass could not be converted to float in /home/user/scripts/code.php on line 125 | |||
float(1) | |||
| Object of class stdClass could not be converted to string | |||
| [] | |||
| {} | |||
|- | |||
! new class {function __toString(){ return "value"; }} | |||
| string(6) "object" | |||
| bool(true) | |||
| | |||
Warning: Object of class class@anonymous could not be converted to int in /home/user/scripts/code.php on line 125 | |||
int(1) | |||
| | |||
Warning: Object of class class@anonymous could not be converted to float in /home/user/scripts/code.php on line 125 | |||
float(1) | |||
| string(5) "value" | |||
| [] | |||
| {} | |||
|- | |||
! (function() { yield 1; yield 2; })() | |||
| string(6) "object" | |||
| bool(true) | |||
| | |||
Warning: Object of class Generator could not be converted to int in /home/user/scripts/code.php on line 125 | |||
int(1) | |||
| | |||
Warning: Object of class Generator could not be converted to float in /home/user/scripts/code.php on line 125 | |||
float(1) | |||
| Object of class Generator could not be converted to string | |||
| [] | |||
| {} | |||
|- | |||
! fopen('file', 'r') | |||
| string(8) "resource" | |||
| bool(true) | |||
| int(6) | |||
| float(6) | |||
| string(14) "Resource id #6" | |||
| array(1) { | |||
[0]=> | |||
resource(6) of type (stream) | |||
} | |||
| object(stdClass)#5 (1) { | |||
["scalar"]=> | |||
resource(6) of type (stream) | |||
} | |||
|- | |||
|colspan="25"| * ремарка | |||
|- | |||
|} | |||
== Объявление типов для строгой типизации == | == Объявление типов для строгой типизации == |
Версия от 21:00, 2 ноября 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 | string(4) "NULL" | bool(false) | int(0) | float(0) | string(0) "" | [] | {} | |||||||||||||||||
true | string(7) "boolean" | bool(true) | int(1) | float(1) | string(1) "1" | [true] | {"scalar":true} | |||||||||||||||||
false | string(7) "boolean" | bool(false) | int(0) | float(0) | string(0) "" | [false] | {"scalar":false} | |||||||||||||||||
0 | string(7) "integer" | bool(false) | int(0) | float(0) | string(1) "0" | [0] | {"scalar":0} | |||||||||||||||||
1 | string(7) "integer" | bool(true) | int(1) | float(1) | string(1) "1" | [1] | {"scalar":1} | |||||||||||||||||
1.0 | string(6) "double" | bool(true) | int(1) | float(1) | string(1) "1" | [1] | {"scalar":1} | |||||||||||||||||
M_PI | string(6) "double" | bool(true) | int(3) | float(3.141592653589793) | string(15) "3.1415926535898" | [3.141592653589793] | {"scalar":3.141592653589793} | |||||||||||||||||
INF | string(6) "double" | bool(true) | int(0) | float(INF) | string(3) "INF" | array(1) {
[0]=> float(INF) } |
object(stdClass)#5 (1) {
["scalar"]=> float(INF) } | |||||||||||||||||
NAN | string(6) "double" | bool(true) | int(0) | float(NAN) | string(3) "NAN" | array(1) {
[0]=> float(NAN) } |
object(stdClass)#5 (1) {
["scalar"]=> float(NAN) } | |||||||||||||||||
"" | string(6) "string" | bool(false) | int(0) | float(0) | string(0) "" | [""] | {"scalar":""} | |||||||||||||||||
"0" | string(6) "string" | bool(false) | int(0) | float(0) | string(1) "0" | ["0"] | {"scalar":"0"} | |||||||||||||||||
"1" | string(6) "string" | bool(true) | int(1) | float(1) | string(1) "1" | ["1"] | {"scalar":"1"} | |||||||||||||||||
"true" | string(6) "string" | bool(true) | int(0) | float(0) | string(4) "true" | ["true"] | {"scalar":"true"} | |||||||||||||||||
"false" | string(6) "string" | bool(true) | int(0) | float(0) | string(5) "false" | ["false"] | {"scalar":"false"} | |||||||||||||||||
"null" | string(6) "string" | bool(true) | int(0) | float(0) | string(4) "null" | ["null"] | {"scalar":"null"} | |||||||||||||||||
[] | string(5) "array" | bool(false) | int(0) | float(0) |
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 string(5) "Array" |
[] | {} | |||||||||||||||||
[0] | string(5) "array" | bool(true) | int(1) | float(1) |
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 string(5) "Array" |
[0] | {"0":0} | |||||||||||||||||
["abc"] | string(5) "array" | bool(true) | int(1) | float(1) |
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 string(5) "Array" |
["abc"] | {"0":"abc"} | |||||||||||||||||
["a"=>"b"] | string(5) "array" | bool(true) | int(1) | float(1) |
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 string(5) "Array" |
{"a":"b"} | {"a":"b"} | |||||||||||||||||
[["a"=>"b"]] | string(5) "array" | bool(true) | int(1) | float(1) |
Warning: Array to string conversion in /home/user/scripts/code.php on line 125 string(5) "Array" |
[{"a":"b"}] | {"0":{"a":"b"}} | |||||||||||||||||
new stdClass() | string(6) "object" | bool(true) |
Warning: Object of class stdClass could not be converted to int in /home/user/scripts/code.php on line 125 int(1) |
Warning: Object of class stdClass could not be converted to float in /home/user/scripts/code.php on line 125 float(1) |
Object of class stdClass could not be converted to string | [] | {} | |||||||||||||||||
new class {function __toString(){ return "value"; }} | string(6) "object" | bool(true) |
Warning: Object of class class@anonymous could not be converted to int in /home/user/scripts/code.php on line 125 int(1) |
Warning: Object of class class@anonymous could not be converted to float in /home/user/scripts/code.php on line 125 float(1) |
string(5) "value" | [] | {} | |||||||||||||||||
(function() { yield 1; yield 2; })() | string(6) "object" | bool(true) |
Warning: Object of class Generator could not be converted to int in /home/user/scripts/code.php on line 125 int(1) |
Warning: Object of class Generator could not be converted to float in /home/user/scripts/code.php on line 125 float(1) |
Object of class Generator could not be converted to string | [] | {} | |||||||||||||||||
fopen('file', 'r') | string(8) "resource" | bool(true) | int(6) | float(6) | string(14) "Resource id #6" | array(1) {
[0]=> resource(6) of type (stream) } |
object(stdClass)#5 (1) {
["scalar"]=> resource(6) of type (stream) } | |||||||||||||||||
* ремарка |
Объявление типов для строгой типизации
Объявление типов (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 |