在本教程中,我们将学习如何使用构造函数初始化对象的属性,并使用析构函数从内存中释放对象之前清理资源。
当你创建一个新对象时就初始化它的属性是很有用的,例如,对于银行账户对象,你可以设置它的初始余额为一个特定的金额。PHP提供了一个特殊的方法来帮助初始化对象的属性,称为构造函数。
要将构造函数添加到类中,只需添加一个名称为_construct()的特殊方法。每当创建一个新对象时,PHP都会搜索这个方法并自动调用它。
下面的例子向BankAccount类添加了一个构造函数,用于初始化帐号和初始金额:
class
BankAccount{
/**
* 银行账户号码
* @var string bank account number
*/
private
$accountNumber
;
* 总余额
* @var float total balance
$totalBalance
* 初始化银行账户的号码和初始金额
*
* @param string $accountNo
* @param float $initialAmount
public
function
__construct(
$accountNo
,
$initialAmount
){
$this
->accountNumber =
->totalBalance =
}
//... 其他方法
现在,您可以使用帐号和初始金额创建一个新的银行帐户对象,如下所示:
// 创建一个新的银行帐户对象
$account
=
new
BankAccount(
'12345678'
,1000);
构造函数重载允许您创建多个具有相同名称但参数不同的构造函数。构造函数重载使您能够以各种方式初始化对象的属性。
下面的例子演示了构造函数重载的思想:
__construct(){
我们创建了三个构造函数:
不过PHP还不支持构造函数重载。幸运的是,您可以通过使用几个PHP函数来实现相同的构造函数重载效果。
让我们看下面的例子:
$args
= func_get_args();
$num
= func_num_args();
if
(method_exists(
$f
'init_'
.
)) {
call_user_func_array(
array
(
),
);
init_1(
init_2(
$a1
'123456'
, 100);
var_dump(
$a2
'223456'
首先我们使用func_get_args()函数获得构造函数的参数,还使用func_num_args()函数获得参数的数量。然后我们使用method_exists()函数根据构造函数的参数数量来检查init_1()和init_2()方法是否存在。如果对应的方法存在,则使用call_user_func_array()函数来调用它。
func_get_args()
func_num_args()
method_exists()
call_user_func_array()
PHP析构函数允许您在PHP从内存中释放对象之前清理资源。例如,您可以在构造函数中创建一个文件句柄,然后在析构函数中关闭它。
要将析构函数添加到类中,只需简单地添加一个特殊的方法__destruct(),如下所示:
__destruct(){
// 清理资源的代码
关于析构函数,有一些点需要注意:
下面的简单FileUtil类演示如何使用析构函数关闭文件句柄。
FileUtil{
$handle
$filename
* 使用filename和mode初始化FileUtil
* @param string $filename
* @param string $mode
$mode
->filename =
->handle =
fopen
* 关闭文件句柄
->handle){
fclose(
->handle);
* 显示文件内容
display(){
echo
fread
->handle,
filesize
->filename));
$fu
FileUtil(
'./test.txt'
'r'
->display();
原文链接:https://codingdict.com/