PHP条件使对象扩展

时间:2013-12-04 14:39:36

标签: php oop

我有两个方法的对象让我们说他们的名字是'动物'和'狮子'

 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();

2 个答案:

答案 0 :(得分:0)

也许你可以制作两个不同的课程,

一个伸展动物的classe LionAnimal 还有另一个没有扩展Animal的狮子

在这种情况下,您在LionAnimal和Lion类中会有重复的代码, 但是因为PHP只允许单继承是别的办法(你只能扩展一个类)

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

答案 1 :(得分:0)

为什么不沿着这些方向做点什么:

<?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();