欢迎来到站长教程网!

PHP教程

当前位置:主页 > 网络编程 > PHP教程 >

php面向对象之析构函数和对象引用

时间:2020-05-24|栏目:PHP教程|点击:

1、了解析构函数的定义

2、了解析构函数的作用

3、了解析构函数的特点

4、掌握对象引用赋值的概念和特点

(一)、析构函数

1、定义它是一个特殊的函数

public function destruct(){}

2、作用:清理对象,释放内存

3、特点:

1、自动执行,而非手动调用

2、类一旦定义了析构函数,程序结束前就会销毁该类下的所有实例对象

3、在应用程序结束前的最后一刻执行,除非一些特殊情况,比如第4点,或者当对象的生命周期结束以后也会自动执行

4、 一旦我们手动的销毁一个对象,系统会自动的触发该对象的析构函数

特别注意一个特殊的情况:就是如果对象还被其他对象引用的情况下,它的析构函数也不会被触发

5、在对象的生命周期结束前执行

6、应用程序结束前的最后一刻,会销毁掉还未销毁的对象,已经销毁的对象不会再次被销毁

进一步得出,一个对象的析构函数只能执行1次,不会执行多次

7、在php中如果我们不为类定义个析构函数,那么php会自动的为类创建一个析构函数,然后在

程序结束前调用默认的析构函数,但是一旦定义了析构函数,就会执行我们写的析构函数

进一步我们就可以在自己的析构函数里写自己的业务代码

比如如果程序使用了打印机资源,我们可以销毁对象前释放打印机资源

相关的代码如下:

<?php class NbaPlayer{ public $name = "";//姓名 public $height = "";//身高 public $weight = "";//体重 public $team = "";//团队 public $playerName = "";//球员号码 public function __construct( $name,$height,$weight,$team,$playerName ){ $this->name = $name; $this->height=$height; $this->weight = $weight; $this->team = $team; $this->playName = $playerName; echo "构造函数执行了,当前对象是{$this->name}<br/>"; } //析构函数 public function __destruct(){ echo "销毁对象".$this->name."<br/>"; } //跑步 public function run(){ echo "跑步中<br/>"; } //跳跃 public function jump(){ echo "跳跃<br/>"; } //运球 public function dribble(){ echo "运球<br/>"; } //传球 public function pass(){ echo "传球<br/>"; } //投篮 public function shoot(){ echo "投篮<br/>"; } //扣篮 public function dunk(){ echo "扣篮<br/>"; } } //创建乔丹对象 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23"); //输出乔丹对象 echo "名称= ".$jordon->name."<br/>"; //让乔丹跑步 $jordon->run(); //创建科比对象 $kobe = new NbaPlayer("科比","2米","93公斤","湖人","24"); //创建詹姆斯对象 $james = new NbaPlayer("詹姆斯","2.03米","120公斤","热火","6"); $james1 = new NbaPlayer("詹姆斯1","2.03米","120公斤","热火","6"); $james2 = new NbaPlayer("詹姆斯2","2.03米","120公斤","热火","6"); $jordon = null;//手动的销毁了对象 ,此时乔丹对象的析构函数将会被触发 $kobe = null;//手动的销毁了对象 ,此时科比对象的析构函数将会被触发 echo "<b>程序结束完毕</b><br/>"; ?>

接下来,我代码修改如下,添加一个Mysql数据库连接类,然后在NbaPlayer构造函数里面调用它

这是Mysql.class.php,里面定义了一个析构函数

<?php //数据库类 class Mysql{ //定义属性 public $conn = ""; //构造函数 public function __construct( ){ //初始化行为 初始化方法 $this->initConn(); } //析构函数 销毁数据库连接 public function __destruct(){ //销毁连接 if( $this->conn ){ mysqli_close( $this->conn ); echo "销毁了连接<br/>"; } } //定义方法 //创建公共的方法 获取数据库连接 public function initConn(){ $config = Array( "hostname"=>"127.0.0.1", "database"=>"Nbaplayer", "username"=>"root", "password"=>"root" ); $this->conn = mysqli_connect( $config['hostname'],$config['username'] ,$config['password'], $config['database']); } } ?>

接下来还是定义个NbaPlayer类,但是为了突出重点,所以NbaPlayer类我会简写如下:

<?php require_once "Mysql.class.php"; class NbaPlayer{ public $name = "";//姓名 public $height = "";//身高 public $weight = "";//体重 public $team = "";//团队 public $playerName = "";//球员号码 public $conn = "";//添加一个数据库连接属性 public function __construct( $name,$height,$weight,$team,$playerName ){ $this->name = $name; $this->height=$height; $this->weight = $weight; $this->team = $team; $this->playName = $playerName; //初始化数据库连接属性 $mysql = new Mysql(); $this->conn = $mysql->conn; } //新增获取所有Nba球员的方法 public function getAll(){ //创建数据库连接 $conn = $this->conn; //写sql $sql = " select * from ".$this->tableName; //执行sql $result = mysqli_query( $conn,$sql ); //获取数据 // mysqli_fetch_all($result)//特点:不会包含字段名 $list = Array(); while( $row = mysqli_fetch_assoc( $result ) ){ $list[] = $row; } //返回数据 return $list; } } //创建乔丹对象 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23"); $list = $jordon->getAll(); echo "<b>程序结束完毕</b><br/>"; ?>

上一篇:PHP中的面向对象之构造函数详解

栏    目:PHP教程

下一篇:PHP中面向对象之继承

本文标题:php面向对象之析构函数和对象引用

本文地址:http://www.blue1000.com/wangluobiancheng/PHPjiaocheng/1488.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:1961407250 | 邮箱:1961407250#qq.com(#换成@)

Copyright © 2002-2022 BK网络学院版权所有 Power by DedeCms 粤ICP备19027147号-7