构造函数究竟是做什么的?



昨天我正在阅读PHP类,突然有些事情对我来说很奇怪。这是关于C#和PHP中的构造函数的。

我的问题是什么是构造函数?它不是一种特殊方法,在实例化一个类时使用,该类可以执行类似方法的操作并为 Memory 等类获取必要的资源?如果是,例如,当我们有一个名为 A 的父类时,我们派生另一个名为 B 的类并创建 B 的实例并调用 B 构造函数并将一些参数发送到其父 (A) 使用 :base(args.) (在 C# 中)并使用 parent::__construct(args) (在 PHP 中),所以它会调用父构造函数, 我们不想完全为父级获取资源,但我们只是调用父构造函数,它为我们做这件事。这里到底发生了什么?

我想在这种情况下只是简单地像函数一样调用它! :\我不知道我是否把自己说清楚了...问我是否有任何歧义,谢谢;)

更新顺便给我投反对票谢谢... 看看这个链接: Microsoft文档 据我在这里阅读,它不仅仅是一个包含代码块的简单函数。(但有你说的差异,没有返回值等) 如果它只是一个在创建实例时调用的函数,那么为什么如果我们将其设为私有,那么我们就不能再创建它的任何实例呢? 为什么当我们想要创建一个类时,在类名的末尾添加一个(),当我们想要将任何参数传递给构造函数时,请使用那些()发送? [人员new_person = 新人();] 如果您也认为这是一个没有任何努力的问题,请再次投反对票:D

构造函数基本上只是一个函数。普通函数和构造函数之间的区别在于,构造函数

  1. 没有返回值(甚至不为空)
  2. 命名类似于类本身(或具有预定义的特殊名称)
  3. 被归类为必须在对象处于可用状态之前执行的强制函数
  4. 不能像其他函数一样调用

创建对象的新实例时,将自动调用构造函数。

更新:

要理解为什么你不能使用私有构造函数(从外部)创建某物的新实例,请暂时将其视为普通函数。
如果要从所述类外部调用new ClassWithPrivateConstructor(),它将不起作用,因为您无权访问构造函数。

您现在可能认为私有构造函数是无用的。但事实并非如此。有正当理由。例如。单例对象。

对于()再次将构造函数视为普通函数。你想要调用构造函数。甚至可能有论据。这就是为什么在创建对象的新实例时需要()的原因。

构造函数是一个代码块,类似于创建对象实例时调用的方法。

构造函数没有返回类型。构造函数的名称必须与类的名称相同。

最新更新