php类的链实例化
我有三个php类。我可以这样实例化它们:php类的链实例化,php,Php,我有三个php类。我可以这样实例化它们: $piza = new Mashrooms(new SeaFood(new PlainPiza())); $temp = Mashrooms(new SeaFood(new PlainPiza())); $piza = new $temp; 但是,当我尝试以这种方式动态实例化它们时: $piza = new Mashrooms(new SeaFood(new PlainPiza())); $temp = Mashrooms(new SeaFo
$piza = new Mashrooms(new SeaFood(new PlainPiza()));
$temp = Mashrooms(new SeaFood(new PlainPiza()));
$piza = new $temp;
但是,当我尝试以这种方式动态实例化它们时:
$piza = new Mashrooms(new SeaFood(new PlainPiza()));
$temp = Mashrooms(new SeaFood(new PlainPiza()));
$piza = new $temp;
它失败并显示此错误:
致命错误:未找到类“SeaFoodnew Mashrooms”
感谢您的帮助。$temp是一个对象,而不是一个类,您不能在现有对象上使用new关键字
$plain = 'PlainPiza';
$seafood = 'SeaFood';
$mashrooms = 'Mashrooms';
$piza = new $mashrooms(new $seafood(new $plain)));
鉴于新的信息
问题是我不知道要实例化多少类 我认为你的方法可能是错误的。你有没有想过开一个比萨饼课,把你的浇头对象添加到比萨饼对象中?例如:
<?php
class Pizza
{
private $_toppings;
private $_placements = array('left', 'right', 'whole');
public function _construct()
{
foreach($this->_placements as $placement)
{
$this->_toppings[$placement] = array();
}
}
public function add_topping(Base_Topping $topping, $placement)
{
if(in_array($placement, $this->_placements))
{
array_push($this->_toppings[$placement], $topping);
}
}
}
abstract class Base_Topping
{
protected $_price = 0.00;
protected $_name = 'No Name';
public function get_name()
{
return $this->_name;
}
public function get_price()
{
return $this->_price;
}
}
class Mushrooms extends Base_Topping
{
protected $_price = '1.00';
protected $_name = 'Mushrooms';
}
// assuming $_POST['toppings'] = array('Mushrooms' => 'whole', 'Pepperoni' => 0, 'Sausage' => 0, etc...)
$pizza = new Pizza();
$toppings = array_filter($_POST); // will return anything with a non-false value
foreach($toppings as $name => $coverage)
{
$topping = new $name();
$pizza->add_topping($topping, $coverage);
}
?>
这将有助于:
$temp = "Mashrooms";
$pizza = new $temp(new SeaFood(new PlainPiza()));
请参见此处:为什么需要这样做?这不是PHP中用于实例化对象的语法……我使用的是decorator设计模式。我希望用户选择一个浇头,并据此计算价格。问题是我不知道我将实例化多少类。这取决于用户选择浇头的方式。