php new一个新对象吗,php – 为什么不在对象构造函数内实例化一个新对象?

博客讨论了在类构造函数中创建新对象的实践,与依赖注入的原则相冲突。作者提到虽然在构造函数内部实例化对象方便了代码复用和简化,但评论者Matija建议依赖关系应从外部推入,以提高代码的可读性和测试性。文章通过举例说明了在不同场景下两种做法的优缺点,并提到了在Delphi中类似的做法。尽管作者经常采用构造函数内实例化,但他也意识到外部注入的重要性。
摘要由CSDN通过智能技术生成

我回答了一个问题(

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。

>(不重要,但有些原因)通常我是使用我的课程的人。

请解释一下,避免在构造函数中创建对象真的很重要吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值