Задать вопрос
@Vladimir-Hetman

Аналог unset в ООП?

Прочитав доки про деструктор я понял, что деструктор это аналог unset().
Затем, я решил свой код ООП переписать на процедурный стиль.

Правильно ли я переписал свой код?
И верно ли, что деструктор это аналог unset() ?

Решил этот код ООП:
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);
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Rsa97 К ответам на вопрос (3)
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Код переписан абсолютно неверно.
Конструктор - это не просто вызов функции. В результате его работы создаётся и инициализируется экземпляр класса.
Деструктор может выполнять действия, связанные с удалением экземпляра, например освобождение памяти, закрытие файлов, освобождение дескрипторов и т.д.
Переписать ООП в процедурный код можно примерно так:
spoiler
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);
Ответ написан