我遇到了一个问题:
致命错误:在第 37 行调用 C:\OSPanel\domains\zandstra.com\index.php 中的未定义方法 ShopProductWriter::getProducer((
可能是什么原因造成的?
<?php
class ShopProduct {
public $title;
public $producerSurName;
public $producerFirstName;
public $price = 0;
public function __construct (
$title,
$firstName,
$surName,
$price
)
{
$this->title = $title;
$this->producerFirstName = $firstName;
$this->producerSurName = $surName;
$this->price = $price;
}
public function getProducer () {
return $this->producerFirstName . " " . $this->producerSurName;
}
}
$product1 = new ShopProduct (
"My Antonia",
"Willa",
"Cather",
"5.99"
);
class ShopProductWriter {
public function write ($shopProduct){
$str=$shopProduct->title . ":" . $shopProduct->getProducer()
. " (".$shopProduct->price.")n";
print $str;
}
}
$product1 = new ShopProductWriter("My Antonia", "Willa", "Cather", 5.99);
$writer = new ShopProductWriter();
$writer->write($product1);
这里
$product1 = new ShopProductWriter("My Antonia", "Willa", "Cather", 5.99);
你重新创建了$product1
,直到那时还是一个ShopProduct
。由此,$product1
是一个ShopProductWriter
对象。这没有getProducer()
方法,它只有write()
方法。这是您代码中的一个错字,我认为您已经多次重写了代码,并且留下了一些旧的初始化,您应该已经摆脱了。以这种形式,可能会做你想要的:
<?php
class ShopProduct {
public $title;
public $producerSurName;
public $producerFirstName;
public $price = 0;
public function __construct (
$title,
$firstName,
$surName,
$price
)
{
$this->title = $title;
$this->producerFirstName = $firstName;
$this->producerSurName = $surName;
$this->price = $price;
}
public function getProducer () {
return $this->producerFirstName . " " . $this->producerSurName;
}
}
class ShopProductWriter {
public function write ($shopProduct){
$str=$shopProduct->title . ":" . $shopProduct->getProducer()
. " (".$shopProduct->price.")n";
print $str;
}
}
$product1 = new ShopProduct("My Antonia", "Willa", "Cather", 5.99);
$writer = new ShopProductWriter();
$writer->write($product1);