【发布时间】:2015-04-10 13:49:54
【问题描述】:
我正在尝试使用 PHP 学习 OOP。我有一个杂志网站,我创建了一个名为 Magazine 的类,其中包含一些属性。加载页面时,应加载封面图片或特定文章,第二个变体是用户从两个选择元素中选择了一年和一个问题。第二个选择元素取决于第一个 - 并非所有年份都有相同数量的问题。所以第二个选择元素的正确数量的选项也应该由 PHP 代码生成(我不想只使用 JavaScript)。 这是基本代码:
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();
矫枉过正?
或者我可以通过 Magazine 类传递 select 元素,但这似乎毫无意义,因为它们并不真正属于那里 (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 解析它们客户端。
-
感谢您的意见,但正如我所说,我不想单独依赖 JS。此外,它不会教我从 OOP 的角度思考,这是问题的主要目的之一。
标签: php class oop constructor