PHP 构造函数的用途
2022-08-30 09:58:15
我正在使用类和对象类结构,但不是在复杂的级别上 - 只是类和函数,然后在一个地方,实例化。
至于 和 ,请非常简单地告诉我:构造函数和析构函数的目的是什么?__construct
__destruct
我知道学校层面的理论解释,但我期待像在现实世界中一样的东西,就像我们必须在哪些情况下使用它们一样。
请也提供一个例子。
问候
我正在使用类和对象类结构,但不是在复杂的级别上 - 只是类和函数,然后在一个地方,实例化。
至于 和 ,请非常简单地告诉我:构造函数和析构函数的目的是什么?__construct
__destruct
我知道学校层面的理论解释,但我期待像在现实世界中一样的东西,就像我们必须在哪些情况下使用它们一样。
请也提供一个例子。
问候
构造函数是在对象初始化(分配其内存,复制实例属性等)后执行的函数。其目的是将对象置于有效状态。
通常,要处于可用状态的对象需要一些数据。构造函数的目的是强制在实例化时将此数据提供给对象,并禁止任何没有此类数据的实例。
考虑一个封装字符串的简单类,该类具有返回此字符串长度的方法。一种可能的实现是:
class StringWrapper {
private $str;
public function setInnerString($str) {
$this->str = (string) $str;
}
public function getLength() {
if ($this->str === null)
throw new RuntimeException("Invalid state.");
return strlen($this->str);
}
}
为了处于有效状态,需要在 之前调用此函数。通过使用构造函数,可以强制所有实例在调用时处于良好状态:setInnerString
getLength
getLength
class StringWrapper {
private $str;
public function __construct($str) {
$this->str = (string) $str;
}
public function getLength() {
return strlen($this->str);
}
}
您还可以保留 以允许在实例化后更改字符串。setInnerString
当对象即将从内存中释放时,将调用析构函数。通常,它包含清理代码(例如,关闭对象正在保存的文件描述符)。它们在PHP中很少见,因为当脚本执行结束时,PHP会清除脚本持有的所有资源。
通过示例学习:
class Person {
public $name;
public $surname;
public function __construct($name,$surname){
$this->name=$name;
$this->surname=$surname;
}
}
为什么这有帮助?因为不是:
$person = new Person();
$person->name='Christian';
$person->surname='Sciberras';
您可以使用:
$person = new Person('Christian','Sciberras');
这是更少的代码,看起来更干净!
注意:正如下面的回复正确指出的那样,构造函数/析构函数用于各种各样的事情,包括:变量的取消/初始化(特别是当值是可变的时),内存解除/分配,不变量(可能被超越)和更清晰的代码。我还想指出,“更干净的代码”不仅仅是“糖”,而是增强了可读性,可维护性等。