function createUser(): object
{
return (object)[
'name' => 'Bankai',
'age' => 40,
];
}
function showUser(object $user): void
{
printf('%s : %s<br>', $user->name, $user->age);
}
function clearUser(object &$user): void
{
echo "Деструктор";
$user = null;
}
$user = createUser();
showUser($user);
clearUser($user);
unset($user);
деструктор это аналог unset()Деструктор — функция, которая вызывается при уничтожении объекта. В ней можно, например, сохранить текущее состояние куда-нибудь. Она будет исполнена при вызове
unset()
.Это не деструктор. Это вывод строки. Никакого отношения$fun = function($name1, $age1){ echo "$name1 $age1 <br>"; echo "Деструктор"; };
unset($fun);
(уничтожение значения переменной) к выводу строки и выполнению кода лямбда-функции не имеет. <?php
class User {
public $name = "Bankai", $age = 40;
function show(){
echo "$this->name:$this->age <br>\n";
}
function __destruct(){
echo "Деструктор \n";
}
};
$obj = new User();
$obj->show();
$obj2 = $obj;
unset($obj2);
var_dump("__destruct not calling");
unset($obj);
var_dump("__destruct called");
Bankai:40 <br>
string(22) "__destruct not calling"
Деструктор
string(21) "__destruct called"
$one = 3;
$two = 4;
$link = [0 => &$one, 1 => &$two];
$link[0] = 1;
$link[1] = 2;
echo $one."\n";
echo $two."\n";
$link = [&$one, &$two];
пойди и гадай, что условие будет работать, если в массиве элементов больше ноля.
Почему об этом не сказано в доках?
if($_FILES)
существовать не должны, все что попадает внутрь условия должно быть приведено к булеан, чтобы разночтений и вопросов, подобных этому, не возникало. В данном случае, в зависимости от назначения кода, можно было использовать как isset() так и !empty(). Но php ругается, почему нельзя ставить тернарик между строками?
Warning: implode(): Argument must be an array