2013-12-22 47 views
0

我发现了一些关于这个错误的信息,但我认为这有些不同。我定义了一个公共变量。如何解决从空值创建默认对象?

Class Controller{  
    public $model; 

我试图$model_name$this间添加额外的字(model)。

public function call_model($model_name){ 
$this->model->$model_name = new $model_class; 

什么是解决方案?

编辑:

Warning: Creating default object from empty value in C:\xampp\htdocs\alisveris\project_library\Controller.php on line 16 
+0

什么?如果你想拥有一个属性'$ model',它本身具有属性,它必须是一个对象本身 – kero

+0

然后我需要隐藏错误吗?或删除'模型'? –

+0

你的问题不清楚。请提供更多细节。 – chanchal118

回答

1

您可以创建静态工厂方法来这样建立不同的模型:

abstract class Model { 
static function CallModel($name) { 
    switch ($name) { 
    case 'Naomi': return new NaomiCampbell(); 
    case 'Anja': return new AnjaRubik(); 
    default: return new $name; 
    } 
} 
} 

class NaomiCampell extends Model {} 
class AnjaRubik extends Model {} 

然后使用:

$MyModel = Model::CallModel($name); 
+0

这看起来很有趣.. –

0

你可以做到这一点通过指定$模型变量为$ this

class Db 
    { 
     public function great() 
     { 
      echo 'great'; 
     } 
    } 


class Controller{ 

    public $model; 

    public function __construct() 
    { 
     $this->model = $this; 

     $model_name = 'Db'; 
     $this->model->$model_name = new $model_name; 

    } 
} 

$cc = new Controller(); 

echo $cc->model->Db->great(); 

输出

great 
相关问题