Я только учусь ООП с PHP, и я пытаюсь разобраться в этом:
Я использую версию 5.6.10 php на моей установке MAMP, если это имеет значение ??
Этот код у меня есть:
<?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, он автоматически уничтожается. Это мешает мне изменить «зло» босса.
Как мне изменить код, или, может быть, настройку php, что destruct () вызывается не автоматически, а только с unset()
функция, чтобы я мог вызывать другие методы с этим классом?
изменения
Я обновил ошибку опечатки, но предоставленные ответы все еще применяются.
Я проверил код ниже, и он работает? Вы должны изменить $this->$evilness
в $this->evilness
в функции changeEvilness
<?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!
Итак, как вы можете видеть, constructor
, changeEvilness()
функция и destructor
все звонят.
Также полезно знать, что процесс php заканчивается, когда достигается последняя строка кода. Так как у вас ничего нет после $ganon = new Boss
, он остановит процесс php и вызовет деструктор.
Других решений пока нет …