我正在考虑 oo PHP 并被这个烦人的事情所困扰。
我正在尝试构建不同类型的灯和灯泡的模型,我想除了致命错误“在 C:\xampp\htdocs 中的非对象上调用成员函数 zapal() \excersises\oo\lampki.php 在第 9 行"
这是代码,然后是我的思维方式,所以请纠正我哪里错了
<?php
class Lampa {
protected $zarowka;
public function _construct (Zarowka $zarowka) {
echo 'Wkrecam .arówke<br>';
$this->zarowka = $zarowka;
}
public function zapal() {
$this->zarowka->zapal();
echo 'Lampka zapalona<br>';
}
public function zgas() {
$this->zarowka->zgas();
echo 'Lampka zgaszona<br>';
}
}
class SciemniaczZarowki {
private $zarowka;
private $poziomJasnosci = 100;
public function _construct (Zarowka $zarowka) {
$this->zarowka = $zarowka;
}
public function rozjasnij() {
if ($this->poziomJasnosci < 100) {
$this->poziomJasnosci++;
echo 'Rozjasniam swiatlo zarowki<br>';
}
}
public function sciemnij() {
if ($this->poziomJasnosci > 1) {
$this->poziomJasnosci--;
echo 'Przyciemniam swiatlo zarowki<br>';
}
}
}
class LampkaNocna extends Lampa{
private $sciemniacz;
public function _construct (Zarowka $zarowka) {
parent::_construct($zarowka);
$this->sciemniaczZarowki = new SciemniaczZarowki($this->zarowka);
}
public function rozjasnij() {
$this->sciemniaczZarowki-> rozjasnij();
}
public function sciemnij() {
$this->sciemniaczZarowki-> sciemnij();
}
}
// Dodane przez mnie
class Zarowka{
public $kolor;
function __construct(){
echo "Jam zarówka";
$this->kolor = "biały";
}
private function zapal(){
echo "zarówka: Świace!";
}
private function zgas(){
echo "zarówka: Gasne!";
}
}
$zarowka = new Zarowka();
$lampka = new LampkaNocna($zarowka);
$lampka->zapal();
$lampka->rozjasnij();
$lampka->sciemnij();
$lampka->sciemnij();
$lampka->rozjasnij();
$lampka->rozjasnij();
$lampka->rozjasnij();
$lampka->zgas();
?>
由于此表示不显示行号,因此我将其分成几部分。导致错误的函数在 Lampa 类中:
public function zapal() {
$this->zarowka->zapal();
echo 'Lampka zapalona<br>';
}
我的想法一直是,因为我有 Zarowka 类,它有一个方法,我后来在该行中调用它应该没问题。更重要的是在创建一个新的 Lampa 对象之前我已经有一个对象 Zarowka,所以为什么它说它是非对象问题(因为在
$lampka = new LampkaNocna($zarowka);
我把它传给兰帕)?
我敢打赌,解决方案简单易行,但我想我已经盯着这段代码太久了。如果您决定回答并有一些时间,请您可以逐步描述您的想法,以便未来的读者可以利用它。