Vývoj PHP jsem přestal detailně sledovat u verze 5.5. Od té doby si nějakých změn čas od času všimnu, ale ke konkrétní verzi je přiřadit nedokážu. Proto si udělám malý přehled:
function f($a = 1 + 2)
.const A = []
.function f(...$args)
.f(...$args)
.2 ** 3
.use
může do jmenných prostorů importovat i funkce a konstanty: use function f
.__debuginfo
lze ovlivnit výstup var_dump
.$a ?? 0
.1 <=> 2
.new class {}
."\u{aa}"
.Closure::call
lze anonymní funkci snadněji zavolat s objektem.: $f->call(new C)
.use
dovoluje používat skupiny: use Namespace\{A, B, C}
.yield
můžou mít i návratovou hodnotu: function f() { yield 1; return 2; }
.yield from
: yield from gen()
.intdev
.random_int
a random_bytes
.list
funguje správně i s objekty implementujícími ArrayAccess
.(clone $c)->f()
.E_STRICT
byly rozstrkané do jiných úrovní."0x0a" != 10
.call_user_method
, set_magic_quotes_runtime
, ereg
, mysql_query
a příbuzné.[]
lze používat místo list
: foreach ($data as [$id, $name])
.private const A = 1
.catch
uvést více: catch (FirstException | SecondException $e)
.list
podporuje klíče: list("id" => $id) = $row
.$s[-1]
."1a" * 2
.echo UNDEF
.count
varuje při předání nespočetných typů: count(1)
.list
podporuje reference: [&$a] = $data
.f(1,)
.fn
: fn($a) => 2 * $a
.??=
: $a ??= 0;
.[1, ...[2, 3], 4]
._
: 123_000
.__serialize
a __unserialize
jako náhrada za Serializable
.[]
u hodnot, které to nepodporují, vyvolá noticku: $int[0]
.f($a: 1)
.#[Attribute] class C {}
.function __construct(private int $a)
.match
: match ($a) { 1 => 'x', }
.?->
: $o?->f()
.$object::class
.function f($a,)
.catch
není potřeba ukládat do proměnné: catch (Exception)
.0 == "" // dříve true, nyní false
.$php_errormsg
.__autoload
, create_function
, each
, get_magic_quotes_gpc
, get_magic_quotes_runtime
.implode
už nepodporuje prohození parametrů.E_ALL
..
se vyhodnocuje později než +
a -
: 'Sum: ' . $a + $b
.$null->a = 1; $a[$array] = 1; $scalar[0] = 1; echo UNDEF; count(1);
.$undef; $a->undef; $a['undef']; $null->a; $scalar[0]; echo $array; $s[null]; $s[$long]; $s[0] = ""; "1a" * 2;
.$s[0] = "ab";
.[] * 2
.$a{0}
.(0 ? 1 : (2 ? 3 : 4))
."1 " * 2
.parse_str
vyžaduje druhý parametr.enum E { case A; case B; }
.0o777
.[...['a' => 1]]
.function f(...$arg, named: $arg)
.$_FILES['name']['full_path']
.Fibers
.(...)
: array_map(strlen(...), $array)
.function f($a = new A)
.readonly
.final public const X = ''
.htmlspecialchars
defaultně používá ENT_QUOTES
.#[\SensitiveParameter]
.readonly
mohou být označené celé třídy.strtolower
a spol. už neberou ohled na locale.#[\Override]
.static $a = f()
.number_format
umožňuje zaokrouhlit před desetinnou čárkou: number_format(123, -1)
. public string $fullName { get => $this->firstName . ' ' . $this->lastName; }
.public protected(set) string $name;
.#[\Deprecated]
.Změny v deklaraci typů jsem vynechal, existuje přehledná tabulka. Pro testování kompatibility kódu je k nezaplacení 3v4l.