PHP - 破坏澄清

时间:2015-09-04 22:55:46

标签: php oop destructor unset

我正在学习使用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类的新实例时,它会自动被销毁。这使我无法改变邪恶&#34;老板。

如何更改代码,或者自动调用destruct()的php设置,但只能使用unset()函数,以便我可以使用该类调用其他方法?

更改 我更新了拼写错误,但提供的答案仍然适用。

1 个答案:

答案 0 :(得分:1)

我测试了下面的代码,它有效吗?您必须在changeEvilness函数

中将$this->$evilness更改为$this->evilness
<?php

    class Baddie {
        public $evilness = 10;
    }

    class Boss extends Baddie {
        public $evilness = 50;

        public function changeEvilness($value)
        {
            $this->evilness = $value;
        } 

        public function __destruct() {

            echo "You beat the boss!";
        }

    }

    $ganon = new Boss;
    echo $ganon->evilness ."\n";
    $ganon->changeEvilness(1337);
    echo $ganon->evilness ."\n";
?>

此输出:

50
1337
You beat the boss!

如您所见,constructorchangeEvilness()函数和destructor都被调用。

同样很高兴知道php进程在到达最后一行代码时结束。因为在$ganon = new Boss之后你没有任何东西,它将停止php进程并调用析构函数。