我正试图用PHP学习OOP。我有一个杂志的网站,我创建了一个名为杂志与一些属性的类。当加载页面时,应该加载封面图片或特定文章,第二个变体是用户从两个选择元素中选择了一年和一个问题。第二个选择要素依赖于第一个 - 不是所有年份都有相同数量的问题。因此,第二个select元素的正确选项数量也应该由PHP代码生成(我不想仅为此使用JavaScript)。 这里是基本的代码:OOP设计 - 多个类,辅助方法或程序代码?
class Magazine {
public $contents;
public $cover;
public $currentArticle;
public function __construct($year,$issue) {
$this->contents = ...;
...
}
}
$magazine = new Magazine(...);
而现在的问题是:我应该在哪里创建的选择要素是什么? 1)在一个自己的类? 2)在杂志类中,可能通过辅助方法? 3)在我创建类的实例的主代码中?
方法头号(1A)或许是这个样子:
class Magazine {
public $contents;
public $cover;
public $currentArticle;
public function __construct($year,$issue) {
$this->contents = ...;
...
}
}
class SelectMagazine {
public $year;
public $issue;
public function __construct($year,$issue) {
$this->year = ...;
...
}
}
$magazine = new Magazine();
$selectMagazine = new SelectMagazine();
矫枉过正?
或者,我可以通过杂志类中选择元素,但这似乎毫无意义,因为他们并不真正属于那里(1B):
class Magazine {
public $contents;
public $cover;
public $currentArticle;
public function __construct($year,$issue) {
$this->contents = ...;
...
$selectMagazine = new SelectMagazine();
$this->year = $selectMagazine->year;
...
}
}
class SelectMagazine {
public $year;
public $issue;
public function __construct($year,$issue) {
$this->year = ...;
...
}
}
$magazine = new Magazine();
方法号两者具有同样的问题1B - 如果对象被认为是反映真实世界的,那么选择元素并不真正是杂志(对象)的(实例)的属性。
方法3 - 低估?
我认为针对您的问题的另一个更注重JS的解决方案是将带有特定问题的杂志地图以JSON格式传递给客户端,然后使用JS/jQuery解析它们。 – eriksson 2015-02-10 14:04:22
感谢您的意见,但正如我所说,我不想单靠JS。此外,它不会教我从面向对象的角度来思考,这是问题的主要目的之一。 – linurb 2015-02-11 07:59:21