<?php
function swap( &$a, &$b ): void
{ [ $a, $b ] = [ $b, $a ]; }
?>
Π’ΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ°Π»ΠΈ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌΡΠΌΠΈ.
Π’ΠΈΠΏ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌΡΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·Π°Π»ΠΈ Π²ΠΎΠΏΡΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊ.
ΠΠ½Π°ΠΊ Π²ΠΎΠΏΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅Π΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ,
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null.
<?php
function testReturnA(): ?string
{
return 'elePHPant';
}
var_dump(testReturnA());
function testReturnB(): ?string
{
return null;
}
var_dump(testReturnB());
function test(?string $name)
{
var_dump($name);
}
test('elePHPant');
test(null);
test();
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
string(9) "elePHPant" NULL string(9) "elePHPant" NULL Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in...
ΠΠ»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΈΠΏ void. Π ΡΡΠ½ΠΊΡΠΈΡΡ
Ρ ΡΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° void ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ return,
Π»ΠΈΠ±ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ return, Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ· void-ΡΡΠ½ΠΊΡΠΈΠΉ
Π½Π΅Π»ΡΠ·Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null.
<?php
function swap(&$left, &$right): void
{
if ($left === $right) {
return;
}
$tmp = $left;
$left = $right;
$right = $tmp;
}
$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
null int(2) int(1)
ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°Ρ void-ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ null, Π±Π΅Π· Π²ΡΠ΄Π°ΡΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ.
ΠΡΠΈΡΠΈΠ½Π° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ»ΠΈ Π±Ρ ΡΠ°Π±ΠΎΡΡ ΠΎΠ±ΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ
Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Ρ void-ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
ΠΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² [] ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π΄Π΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ²
ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² ΡΠΈΠΊΠ»Π°Ρ
foreach.
ΠΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΊΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°
ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ list(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ.
<?php
$data = [
[1, 'Tom'],
[2, 'Fred'],
];
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΡΠΈΠ»Π΅ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ list()
list($id1, $name1) = $data[0];
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΡΠΈΠ»Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² []
[$id1, $name1] = $data[0];
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· list()
foreach ($data as list($id, $name)) {
// Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ $id ΠΈ $name
}
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ []
foreach ($data as [$id, $name]) {
// Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ $id ΠΈ $name
}
?>ΠΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
<?php
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
?>Π‘Π΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ ΠΏΡΠ΅Π²Π΄ΠΎΡΠΈΠΏΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΠΈΠΏ callable, ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΎΡΡ Π½ΠΎΠ²ΡΠΌ ΠΏΡΠ΅Π²Π΄ΠΎΡΠΈΠΏΠΎΠΌ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ iterable. ΠΠΎΠ²ΡΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΡΠΈΠΏ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈ ΠΊΠ°ΠΊ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Traversable. Π Π²ΠΎΠΏΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄ΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΈΠΏΠ°ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° array ΠΈΠ»ΠΈ Traversable Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎ ΡΠΈΠΏΠ° iterable. Π ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΡΠΈΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΠΆΠ°ΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ iterable Π΄ΠΎ array ΠΈΠ»ΠΈ Traversable.
<?php
function iterator(iterable $iter)
{
foreach ($iter as $val) {
//
}
}
ΠΠ»ΠΎΠΊΠΈ catch Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅
ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΌΠ²ΠΎΠ» Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΡ |. ΠΡΠΎ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ ΠΏΠΎΠ»ΡΠ·Ρ,
ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ
ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΉ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.
<?php
try {
// ΠΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΊΠΎΠ΄
} catch (FirstException | SecondException $e) {
// ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
}
Π―Π·ΡΠΊΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ list() ΠΈ Π΅Ρ Π½ΠΎΠ²ΡΠΉ
ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ [] ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ.
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π΄Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°ΡΡ
ΠΌΠ°ΡΡΠΈΠ²Ρ Ρ Π½Π΅ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ.
<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΡΠΈΠ»Π΅ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ list()
list("id" => $id1, "name" => $name1) = $data[0];
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΡΠΈΠ»Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² []
["id" => $id1, "name" => $name1] = $data[0];
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ Π² ΡΡΠΈΠ»Π΅ list()
foreach ($data as list("id" => $id, "name" => $name)) {
// ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$id ΠΈ $name
}
// ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ Π² ΡΡΠΈΠ»Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° []
foreach ($data as ["id" => $id, "name" => $name]) {
// ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$id ΠΈ $name
}
?>
Π ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ,
ΠΈ Π² ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ
ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° [] ΠΈΠ»ΠΈ ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ {}
Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΡΠΎΠΊΠ°Ρ
.
Π ΡΡΠ½ΠΊΡΠΈΡΡ
ΠΈ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ.
<?php
var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
string (1) "e" int(3)
ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠ°Ρ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΎΡΡΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊ.
<?php
$string = 'bar';
echo "ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π² ΡΡΡΠΎΠΊΠ΅ '$string' β '$string[-1]'.\n";
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π² ΡΡΡΠΎΠΊΠ΅ 'bar' β 'r'.
ΠΠ° ΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ openssl_encrypt() ΠΈ openssl_decrypt() Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ AEAD-ΡΠ΅ΠΆΠΈΠΌΠΎΠ² GCM ΠΈ CCM.
Π ΠΊΠ»Π°ΡΡ Closure Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΡΠΈΠΏΠΎΠΌ callable Π² ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° Closure.
<?php
class Test
{
public function exposeFunction()
{
return Closure::fromCallable([$this, 'privateFunction']);
}
private function privateFunction($param)
{
var_dump($param);
}
}
$privFunc = (new Test)->exposeFunction();
$privFunc('Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅');
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
string(16) "Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅"
ΠΠ»Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π² ΡΠ΄ΡΠΎ PHP Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ pcntl_async_signals(). ΠΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ.
<?php
pcntl_async_signals(true); // ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ
pcntl_signal(SIGHUP, function($sig) {
echo "SIGHUP\n";
});
posix_kill(posix_getpid(), SIGHUP);
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
SIGHUP
Π ΠΌΠΎΠ΄ΡΠ»Ρ cURL Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Server Push. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° cURL Π²Π΅ΡΡΠΈΡ 7.46 ΠΈ Π²ΡΡΠ΅.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π·Π°Π±Π»Π°Π³ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΡΠ½ΠΊΡΠΈΠΈ curl_multi_setopt() Ρ Π½ΠΎΠ²ΠΎΠΉ
ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ CURLMOPT_PUSHFUNCTION. Π ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
CURL_PUSH_OK ΠΈ CURL_PUSH_DENY,
ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΎΠ±ΡΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Server Push Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ callback-ΡΡΠ½ΠΊΡΠΈΠΈ.
Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ tcp_nodelay.
Note that declaring nullable return type does not mean that you can skip return statement at all. For example:
php > function a(): ?string { }
php > a();
PHP Warning: Uncaught TypeError: Return value of a() must be of the type string or null, none returned in php shell code:2
php > function b(): ?string { return; }
PHP Fatal error: A function with return type must return a value (did you mean "return null;" instead of "return;"?) in php shell code on line 2