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