Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对中的非对象调用成员函数_Php - Fatal编程技术网

Php 对中的非对象调用成员函数

Php 对中的非对象调用成员函数,php,Php,我正忙于oo PHP,并被这件烦人的事情缠住了 我正在尝试建立一个不同类型灯具和灯泡的模型,我想除了致命错误“在C:\xampp\htdocs\exersis\oo\lampki.php第9行对非对象调用成员函数zapal()之外,一切都很好” 这是代码,然后是我的思维方式,请纠正我的错误 <?php class Lampa { protected $zarowka; public function _construct (Zarowka $zarowka) { echo

我正忙于oo PHP,并被这件烦人的事情缠住了

我正在尝试建立一个不同类型灯具和灯泡的模型,我想除了致命错误“在C:\xampp\htdocs\exersis\oo\lampki.php第9行对非对象调用成员函数zapal()之外,一切都很好”

这是代码,然后是我的思维方式,请纠正我的错误

<?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();
?>
我把它传给兰帕

我打赌这个解决方案简单易行,但我想我已经盯着这个代码看太久了。
如果您决定回答并有时间,请您描述一下您的想法,也许可以一步一步地进行,以便将来的读者可以利用它。

在示例代码中,您的构造函数名为
\u construct()
,带有一个前导下划线

在PHP中,正确的构造函数名称是,带有两个前导下划线。换句话说,您的构造函数永远不会被调用——因此您传递的变量实际上不会存储在类中

更新
Lampa
(和所有其他类),使其具有类似于:

public function __construct (Zarowka $zarowka) {
    ....

谢谢你这么多的新家具-我想我们都有本在那里,当你只是空白的打字错误,并最终在一个巨大的挫折。@AdamPaciorek太多次计数=p您将
Zarowka
zapal()
定义为一个私有函数,您希望从外部调用它吗?
$lampka = new LampkaNocna($zarowka);
public function __construct (Zarowka $zarowka) {
    ....