我有两个带有方法的对象,比如说它们的名称是"animal"answers"lion"
class animal{
public $var1;
public function doStuff(){
// do stuff
}
}
class lion{
public $var2;
public function doStuff2(){
// do stuff
}
}
我需要"狮子"来扩展"动物",但有条件。
$type = $_POST['type'];
if($type == 'animal') $obj1 = new lion(); // need to extends to `animal`
else $obj1 = new lion();
所以我认为最糟糕的方法是把物体边缘化,
但我找不到一种不丢失方法的方法。
有没有什么方法可以让它正确,或者在实例上扩展?
或者任何可能的解决方案?
编辑
这是MVC的一部分,我正在学习。。
class model{
// many diffrent model class extends to this class..
}
class SQL{
// this is a class of SQL functions..
}
我不希望SQL类加载自动为类建模
我想在控制器中创建这样做的函数。。
我正在努力避免这种结果:
$this->model->sql->someFunc();
为什么不沿着以下路线做一些事情:
<?php
class Animal
{
public $var1;
public function doStuff ()
{
// do stuff
}
}
class Lion
{
public $var2;
public function doStuff2 ()
{
// do stuff
}
}
class LionExtended extends Animal
{
private $lion;
public function __construct ()
{
$this->lion = new Lion;
}
public function __call ($method, $args)
{
$this->lion->$method($args[0]);
}
}
if ($type == 'animal')
$obj1 = new LionExtended();
else
$obj1 = new Lion();
也许你可以制作两个不同的类,
扩展Animal的一类LionAnimal以及另一个不扩展Animal 的等级Lion
在这种情况下,LionAnimal和Lion类中会有重复的代码,但是因为PHP只允许单一继承,所以没有其他方法(只能扩展一个类)
在编程语言中,你可以有一个狮子和动物超类,还有一个狮子(扩展动物和狮子)和狮子(扩展狮子)