PHP条件使对象扩展


PHP condition make object extends

我有两个带有方法的对象,比如说它们的名称是"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只允许单一继承,所以没有其他方法(只能扩展一个类)

在编程语言中,你可以有一个狮子和动物超类,还有一个狮子(扩展动物和狮子)和狮子(扩展狮子)