构造函数和析构函数

问题

  • 之前在创建人类的对象时,先new一个对象,再给成员变量赋值。那么,如何在创建人类的对象时,直接给成员变量赋值?
  • 引入构造函数

构造函数

  • 构造函数没有返回值,在创建对象时自动调用。
  • 一个类只能有一个构造函数。
  • 如果没有给类自定义构造函数,使用默认的构造函数。
  • 一旦自定义了一个构造函数,默认的构造函数被覆盖。
  • 作用:完成对新对象的初始化,但并不创建对象本身。
  • 在php4中构造函数名和类名一样。
修饰符 function 类名(参数列表) {
	...
}
  • 在php5中增加了另一种形式。(使用此方法!)
修饰符 function __construct(参数列表) {
	...
}

简单实例

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
	class Person{
		public function __construct($iname,$isex,$iage){
			$this->name=$iname;
			$this->sex=$isex;
			$this->age=$iage;
		}
		public function showInfo(){
			echo $this->name." ".$this->sex." ".$this->age."<br/>";
		}
		public $name;
		public $sex;
		public $age;
	}
	
	
	$person=new Person("张三","woman",18);
	$person->showInfo();
?>
</body>
</html>

this指针

  • 系统会给每个对象分配this指针,代表当前对象。
  • this指针本质上是对象的地址。
  • this指针和对象绑定,不能在类外使用。

析构函数

  • 析构函数会在对象被显式销毁时执行。
  • 当一个对象没有任何引用指向它的时候,就会成为一个垃圾对象,php将启动垃圾回收器将对象销毁,从而回收该对象所占的内存。
  • 作用:释放资源,但并不销毁对象本身。
  • 析构函数会自动被调用,先创建的对象后被销毁
  • 基本语法
function __destruct(){
	...
}

简单案例

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
	class Person{
		public function __construct($iname,$isex,$iage){
			$this->name=$iname;
			$this->sex=$isex;
			$this->age=$iage;
		}
		public function showInfo(){
			echo $this->name." ".$this->sex." ".$this->age."<br/>";
		}
		public function __destruct(){
			echo "析构函数<br/>";
		}
		public $name;
		public $sex;
		public $age;
	}
	
	
	$person1=new Person("张三","woman",18);
	$person1=NULL;
	$person2=new Person("李四","man",19);
	$person2->showInfo();
?>
</body>
</html>

在这里插入图片描述

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页