【发布时间】:2015-12-01 04:16:53
【问题描述】:
我只是在学习 PHP 的 OOP,我正在努力解决这个问题:
我在我的 MAMP 安装中使用 php 版本 5.6.10,如果这有什么不同??
这是我的代码:
<?php
class Baddie {
public $evilness = 10;
}
class Boss extends Baddie {
public $evilness = 50;
public function changeEvilness($value)
{
//$this->$evilness = $value; Had this, which was a typo
$this->evilness = $value;
}
public function __destruct() {
echo "You beat the boss!";
}
}
$ganon = new Boss;
?>
//Note the code is from Rob Percivals Udemy course, hence the gaming references.
所以当我调用 Boss 类的新实例时,它会自动销毁。这让我无法改变boss的“邪恶”。
如何更改代码,或者可能是一个不自动调用 destruct() 的 php 设置,而只能使用 unset() 函数,以便我可以从该类调用其他方法?
变化 我已更新拼写错误,但提供的答案仍然适用。
【问题讨论】:
-
当没有对特定对象的引用时,会自动调用析构函数。无法更改(顺便说一句:
$this->$evilness->$this->evilness) -
所以如果我想在定义实例后调用类中的函数,我只需要一个没有析构函数的类?
-
提供的示例实际上很糟糕。
destructor可用于将当前实例的属性保存到数据库/文件/...当不再有任何实例指向它时。如果你想在创建一个类后调用一个方法,你只需要:$foo = new Boss(); $foo->changeEvilness(42);。注意:一个类/函数应该从不负责输出输出
标签: php oop destructor unset