构造函数到底做什么?
What exactly constructors do?
昨天我正在阅读 PHP classes,突然间我觉得有些奇怪。那是关于 C# 和 PHP.
中的构造函数
我的问题是什么是构造函数?它不是一种特殊的方法,在实例化一个 class 时使用,它可以做一些类似方法的事情,并为 class 获取必要的资源,如内存等?如果是,例如当我们有一个名为 A 的父 class 时,我们派生另一个名为 B 的 class 并创建 B 的实例并调用 B 构造函数并将一些参数发送到其父(A ) 使用 :base(args.) (在 C# 中)并使用 parent::__construct(args) (在 PHP 中),调用父构造函数也是如此,我们不想完全占用资源对于父级,但我们只是调用为我们做的父级构造函数。这里到底发生了什么?
我想在这种情况下只是像函数一样调用它! :\ 我不知道我说清楚了没有...问我是否有歧义,谢谢 ;)
已更新
谢谢顺便给我投反对票...
看看这个 link :
Microsoft Docs
就我在这里读到的而言,它不仅仅是一个包含代码块的简单函数。(但与你所说的不同,没有 return 值等)
如果它只是一个在创建实例时调用的函数那么为什么如果我们将它设为私有那么我们就不能再创建它的任何实例了?
为什么当我们想创建一个 class 时在 class 名称的末尾添加一个 ()?当我们想将任何参数传递给构造函数时使用这些 () 来发送?
[人 new_person = 新 人 ();]
如果您也认为这是一个没有任何努力的问题,请再次投反对票:D
构造函数是类似于在创建对象实例时调用的方法的代码块。
构造函数没有 return 类型。构造函数的名称必须与 class.
的名称相同
构造函数基本上只是一个函数。普通函数和构造函数之间的区别在于,构造函数
- 没有 return 值(甚至不是 void)
- 命名类似于 class 本身(或具有预定义的特殊名称)
- 是否class被定义为必须在对象处于可用状态之前执行的强制函数
- 不能像其他函数一样调用
创建对象的新实例时将自动调用构造函数。
更新:
要了解为什么您不能使用私有构造函数(从外部)创建某个对象的新实例,请暂时将其视为一个普通函数。
如果你想从 class 之外调用 new ClassWithPrivateConstructor()
它将不起作用,因为你无权访问构造函数。
您现在可能认为私有构造函数没有用。但事实并非如此。有有效案例。例如。单例对象。
并且对于 ()
再次将构造函数视为普通函数。你想调用构造函数。甚至可能有争论。这就是为什么在创建对象的新实例时需要 ()
的原因。
昨天我正在阅读 PHP classes,突然间我觉得有些奇怪。那是关于 C# 和 PHP.
中的构造函数我的问题是什么是构造函数?它不是一种特殊的方法,在实例化一个 class 时使用,它可以做一些类似方法的事情,并为 class 获取必要的资源,如内存等?如果是,例如当我们有一个名为 A 的父 class 时,我们派生另一个名为 B 的 class 并创建 B 的实例并调用 B 构造函数并将一些参数发送到其父(A ) 使用 :base(args.) (在 C# 中)并使用 parent::__construct(args) (在 PHP 中),调用父构造函数也是如此,我们不想完全占用资源对于父级,但我们只是调用为我们做的父级构造函数。这里到底发生了什么?
我想在这种情况下只是像函数一样调用它! :\ 我不知道我说清楚了没有...问我是否有歧义,谢谢 ;)
已更新 谢谢顺便给我投反对票... 看看这个 link : Microsoft Docs 就我在这里读到的而言,它不仅仅是一个包含代码块的简单函数。(但与你所说的不同,没有 return 值等) 如果它只是一个在创建实例时调用的函数那么为什么如果我们将它设为私有那么我们就不能再创建它的任何实例了? 为什么当我们想创建一个 class 时在 class 名称的末尾添加一个 ()?当我们想将任何参数传递给构造函数时使用这些 () 来发送? [人 new_person = 新 人 ();] 如果您也认为这是一个没有任何努力的问题,请再次投反对票:D
构造函数是类似于在创建对象实例时调用的方法的代码块。
构造函数没有 return 类型。构造函数的名称必须与 class.
的名称相同构造函数基本上只是一个函数。普通函数和构造函数之间的区别在于,构造函数
- 没有 return 值(甚至不是 void)
- 命名类似于 class 本身(或具有预定义的特殊名称)
- 是否class被定义为必须在对象处于可用状态之前执行的强制函数
- 不能像其他函数一样调用
创建对象的新实例时将自动调用构造函数。
更新:
要了解为什么您不能使用私有构造函数(从外部)创建某个对象的新实例,请暂时将其视为一个普通函数。
如果你想从 class 之外调用 new ClassWithPrivateConstructor()
它将不起作用,因为你无权访问构造函数。
您现在可能认为私有构造函数没有用。但事实并非如此。有有效案例。例如。单例对象。
并且对于 ()
再次将构造函数视为普通函数。你想调用构造函数。甚至可能有争论。这就是为什么在创建对象的新实例时需要 ()
的原因。