我回答了一个问题(
link),我在另一个类的构造函数中使用了一个新对象的创建,这里的例子是:
class Person {
public $mother_language;
function __construct(){ // just to initialize $mother_language
$this->mother_language = new Language('English');
}
我得到用户“Matija”(his profile)的评论,他写道:你不应该在对象consturctor内实例化一个新的对象,依赖关系应该从外部推送,所以使用这个类的任何人都知道这个类依赖于什么!
一般来说,我可以同意这一点,我明白他的观点。
但是,我以前经常这样做,例如:
>作为其他类的私有属性给我的功能,我可以解决不重复的代码,例如我可以创建一个列表(类实现ArrayAccess接口)的对象),这个类将被使用在另一个类,有这样的对象列表,
>一些类使用例如DateTime对象,
>如果我包含(或自动加载)依赖类,则应该没有错误的问题,
>因为依赖对象可以非常大的数量,传递给类的构造函数可以很长而不清楚,例如
$color = new TColor('red'); // do we really need these lines?
$vin_number = new TVinNumber('xxx');
$production_date = new TDate(...);
...
$my_car = new TCar($color, $vin_number, $production_date, ...............);
>因为我在帕斯卡尔诞生了,那么在德尔福,我有一些习惯。而在Delphi(和FreePascal作为其竞争对手)中,这种做法很频繁。例如,有一个处理字符串数组的TStrings类,并且存储它们不使用数组,而是另外一个提供一些有用方法的类TList,而TStrings只是某种接口。 TList对象是私有声明的,不能从外部访问,而是TStrings的getter和setter。
>(不重要,但有些原因)通常我是使用我的课程的人。
请解释一下,避免在构造函数中创建对象真的很重要吗?