class User {
public $name = "Bankai", $age = 40;
function show(){
echo "$this->name:$this->age <br>";
}
function __destruct(){
echo "Деструктор";
}
};
$obj = new User();
$obj->show();
$fun = function($name1, $age1){
echo "$name1 $age1 <br>";
echo "Деструктор";
};
$fun("Bankai", 40);
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"
деструктор это аналог unset()Деструктор — функция, которая вызывается при уничтожении объекта. В ней можно, например, сохранить текущее состояние куда-нибудь. Она будет исполнена при вызове
unset()
.Это не деструктор. Это вывод строки. Никакого отношения$fun = function($name1, $age1){ echo "$name1 $age1 <br>"; echo "Деструктор"; };
unset($fun);
(уничтожение значения переменной) к выводу строки и выполнению кода лямбда-функции не имеет. 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);