【web 开发基础】PHP类的构造方法和析构方法(59 )

举报
迷彩 发表于 2023/07/22 00:52:58 2023/07/22
【摘要】 前言在PHP中,或者说在面向对象的编程语言中,构造方法存在于每个声明的类中,主要作用是执行一些初始化的任务或操作。如果类中没有直接声明构造方法,那么类会默认生成一个没有参数且内存为空的构造方法。通常称为无参构造方法.在PHP中,声明构造方法的方式有两种,在PHP 5版本之前,构造方法的名称必须与类名相同,这种构造方法的风格在PHP 8中已经被弃用。构造方法从PHP 5版本开始,构造方法的名称...

前言

在PHP中,或者说在面向对象的编程语言中,构造方法存在于每个声明的类中,主要作用是执行一些初始化的任务或操作。如果类中没有直接声明构造方法,那么类会默认生成一个没有参数且内存为空的构造方法。通常称为无参构造方法.

在PHP中,声明构造方法的方式有两种,在PHP 5版本之前,构造方法的名称必须与类名相同,这种构造方法的风格在PHP 8中已经被弃用。

构造方法

从PHP 5版本开始,构造方法的名称必须以两个下划线开头,即“_ _construct”。具体的语法格式如下:

<?php
function __construct([mixed args]){
    //方法的内容
}

一个类只能声明一个构造方法。构造方法中的参数是可选的,如果没有传入参数,就使用默认参数为成员变量进行初始化。

<?php
class Student{
	
	//定义成员属性
	private $name;
	private $gender;
	
	//定义成员方法
	function setName($name){
		$this->name = $name;
	}
	
	function getName(){
		return $this->name;
	}

	function setGender($gender){
		$this->gender = $gender;
	}
	
	function getGender(){
		return $this->gender;
	}
}

//类实例化
$zhangsan = new Student();
$zhangsan->setName('张三');
$zhangsan->setGender('男');

$lisi = new Student();
$lisi->setName('李四');
$lisi->setGender('男');

echo $zhangsan->getName() . "的性别是:" . $zhangsan->getGender() ."\n";
echo $lisi->getName() . "的性别是:" . $lisi->getGender() ."\n";

?>

这个例子是上一篇文章的例子,这个例子中对实例$zhangsan的属性$name进行赋值,还需要通过使用接口setName($name)进行操作,如$zhangsan->setName("张三")。如果想在生成实例$zhangsan的同时就对此实例的属性$name进行赋值,该怎么办呢?

这时就需要构造方法“__construct()”了。这个函数的特性是,当通过关键字new生成实例的时候,它就会被调用执行。它的用途就是经常对一些属性进行初始化,也就是给一些属性进行初始化的赋值。下面通过代码实例介绍构造方法的使用方法和技巧:

<?php
class Student{
	
	//定义成员属性
	private $name;
	private $gender;
	
	function __construct($name, $gender){
		$this->name = $name;
		$this->gender = $gender;
	}
	
	//定义成员方法
	
	function getName(){
		return $this->name;
	}
	
	function getGender(){
		return $this->gender;
	}
}

//类实例化
$zhangsan = new Student('张三','男');
$lisi = new Student('李四', '男');

echo $zhangsan->getName() . "的性别是:" . $zhangsan->getGender() ."\n";
echo $lisi->getName() . "的性别是:" . $lisi->getGender() ."\n";

?>

执行结果如下:

一样的效果但是代码简洁了一些,在new的时候就直接设置对象的属性值.

注:构造方法是不能返回(return)值的。你可以想想类一开始进入就直接结束,是不是不太合适

析构方法

有构造方法,就有它的反面“析构方法”(destructor)。它是在对象被销毁的时候被调用执行的。但是因为PHP在每个请求的最终都会把所有资源释放,所以析构方法的意义是有限的。具体使用的语法格式如下:

<?php
function__destruct(){

    //方法的内容,通常完成一些在对象销毁前的清理任务

}

PHP具有垃圾回收机制,可以自动清除不再使用的对象,从而释放更多的内存。析构方法是在垃圾回收程序执行前被调用的方法,是PHP编程中的可选方法。在实际的使用中使用的稍微少一些.但析构方法在执行某些特定行为时还是有用的,比如在对象被销毁时清空资源或者记录日志信息。

在以下两种情况下,析构方法可能被调用执行:

  1. 代码运行时,当所有对于某个对象的reference(引用)被毁掉的情况下。

  2. 当代码执行到最后并且PHP停止请求的时候调用destructor函数。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。