OOP - 如何定义创建的对象?

时间:2014-09-01 22:19:23

标签: php oop

我问你的建议。 在我的php文件中有一些类。

class Template {

public $id;
public $title;
public $text;
public $description;
public $data = array();
public $content_html;
public $width_content = 500;
public $type;
public $time;
public $user;
public $category;
protected $CI;


// The next code works for a one element of array $data
function __construct($data = array()){
    $this->title    = $data['title'];
    $this->text     = $data['text'];
    $this->category = $data['category'];
    $this->type     = $data['type'];
    $this->time     = $data['time'];

    $this->CI =& get_instance();
    $this->user = new InformationUser($data);
}

class Articles extends Template {
}

class News extends Template {
}

class Init {
   public $posts = array('type' => 2);
}

我的课程的起点是一个班级Init。 在这个类中有一些用户帖子。 在每个元素数组中都有一个类型值,它定义了我必须创建的对象类。 例如:

class Init {
  function define(){
     foreach($this->posts as $val){
      if($val['type'] == 2){
        $article = new Articles($val);
        //TODO $articles
      } else if($val['type'] == 3){
        $news = new News($val);
         //TODO $news
        }
     }
  }
}

我知道变种是错误的,最好将所有数组 posts()放到课堂上。但我不能这样做。 我需要,对于不同类型的数组元素 - 要分开工作(对于新闻 - 新闻类,文章 - 类文章等) 你有什么建议我的?

1 个答案:

答案 0 :(得分:1)

从提供的最小信息中......我假设你正在寻找这样的东西:

    <?php
    class Init {
        public static function define($type, $text)
        {
          switch($type) {
            case 1:
                return new Articles($text);
            break;
            case 2:
                return new News($text);
            break;
            default:
                throw new Exception('Undefined type');
          }
        }
    }

// $template = Init::define(1, 'article text');
// $template = Init::define(2, 'news text');