php面向对象(2)构造和析构函数
一、构造方法
构造方法是类中一个“特殊”的方法,作用是在实例化一个对象的同时,给该对象的属性赋值,使之创建完成的时就具有其本身的特有属性
- 该方法固定格式:[访问修饰符] function _construct(...) {代码块;}
- 修饰符通常为public
- 通常使用$this关键字来对属性进行赋值
- 创建对象的时候自动调用
示例:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
class Persion {
private $name = "";
private $age = 0;
private $sex = ""; function __construct($name, $age, $sex) {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
} public function self_introduction() {
echo "我是".$this->name." 我今年".$this->age." 岁!<br />";
}
} $p1 = new Persion('张三', 30, "男");
$p1->self_introduction();
$p2 = new Persion("李四", 25, "男");
$p2->self_introduction(); ?>
</body>
</html>
结果:
我是张三 我今年30 岁!
我是李四 我今年25 岁!
二、析构函数
在“销毁对象”的时候自动调用,销毁情况:
- unset(对面)
- 没有变量指向该对象对应的内存地址
- 程序结束
说明:
- 析构方法定义:public function _destruct() {...}//注意只能是public修饰,且不能有参数
- 析构方法用于销毁对象时对对象中的一些资源进行清理--php有内置垃圾回收机制,一般不需要定义
示例:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
class P {
private $name = "";
function __construct($name) {
$this->name = $name;
echo "对象".$this->name."创建了<br />";
} function __destruct() {
echo "对象".$this->name."销毁了<br />";
}
} $p1 = new P("p1");
$p2 = new P("p2"); $p1 = new P("p3");
echo "没有变量指向<br />";
echo "<hr />";
echo "unset('p2')<br />";
unset($p2);
echo "<hr />";
echo "程序结束<br />";
?>
</body>
</html>
结果:
对象p1创建了
对象p2创建了
对象p3创建了
对象p1销毁了
没有变量指向
unset('p2')
对象p2销毁了
程序结束
对象p3销毁了
php面向对象(2)构造和析构函数的更多相关文章
- 面向对象_访问修饰符_构造与析构函数_this指针
1:面向对象 以codeblocks举例,在一个工程里面: File-->new -->Class可以建一个类,可以设置类的参数,是否有set get方法,有无构造函数等设置,.h文件主要 ...
- 转:Delphi2010新发现-类的构造和析构函数功能
Delphi2010发布了. 虽然凭着对Delphi的热爱第一时间就安装了,但是现在可能是年纪大了,对新事物缺乏兴趣了.一直都没有仔细研究. 今天有点时间试了一下新功能. 本来C#和Delphi.NE ...
- EC笔记,第二部分:9.不在构造、析构函数中调用虚函数
9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...
- C++ 的全局构造与析构函数
我们知道一般的C/C++ 的程序是从main函数开始的,然后在main函数结束后程序结束.但是不然,在main函数开始执行前,已经有其他的指令被执行了. 为了程序的顺利执行,首先要初始化执行环境,比如 ...
- C++箴言:避免构造或析构函数中调用虚函数
如果你已经从另外一种语言如C#或者Java转向了C++,你会觉得,避免在类的构造函数或者析构函数中调用虚函数这一原则有点违背直觉.但是在C++中,违反这个原则会给你带来难以预料的后果和无尽的烦恼. 正 ...
- Delphi2010新发现-类的构造和析构函数功能
Delphi2010发布了. 虽然凭着对Delphi的热爱第一时间就安装了,但是现在可能是年纪大了,对新事物缺乏兴趣了.一直都没有仔细研究. 今天有点时间试了一下新功能. 本来C#和Delphi.NE ...
- php面向对象之构造函数和析构函数
php面向对象之构造函数和析构函数 简介 php面向对象支持两种形式的构造函数和析构函数,一种是和类同名的构造函数(php5.5之前),一类是魔术方法(php5.5之后).与类名相同的构造函数优先级比 ...
- 面向对象软件构造 (Bertrand Meyer 著)
Part A: The Issues 议题 第一章 软件品质 第二章 面向对象的标准 Part B: The Road To Object Orientation 通向面向对象之路 第三章 模块性 第 ...
- C++构造与析构函数中调用虚函数的问题
前些天想把以前写的内存池算法重写一遍,跨平台是第一目标,当时突发奇想,因为不愿意做成一大堆#if..#end,所以想利用C++的多态性,但是怎么让内存池完好退出却没想到自认为完美的方案.但是一个很偶然 ...
- 关于PHP面向对象中—类的定义与对象的实例化操作以及构造、析构函数的特殊用法
类的定义与对象的实例化操作 <?php //类里面的成员是属于对象的class Hero{ public $name;//成员变量 //成员属性(存在于强类型语言中) prot ...
随机推荐
- nginx去掉url中的index.php
使用情境:我想输入www.abc.com/a/1后,实际上是跳转到www.abc.com/index.php/a/1 配置Nginx.conf在你的虚拟主机下添加: location / { ...
- Webpack webpack+gulp实现自动构建部署
http://www.cnblogs.com/sloong/p/5826859.html
- Spring Cloud(3):Ribbon的使用
基于搭建好的Eureka Server+Eureka Client:https://www.cnblogs.com/xuyiqing/p/10861541.html 有了服务,那么现在学习如何调用服务 ...
- Laravel事件监听器listener与事件订阅者Subscriber的区别
其实就一句话: Each event can have multiple listeners, but a listener can't listen to more than a single ev ...
- 学习笔记:MDN的CSS
HTML用于定义内容的结构和语义,CSS用于设计风格和布局. CSS规则由选择器和声明块组成:声明由属性(properties)和属性值组成. CSS介绍: 盒=框=box,边界=border,内边距 ...
- Regexp:常用的几个正则表达式
1.isEmail /** * * @desc 判断是否为邮箱地址 * @param {String} str * @return {Boolean} */ function isEmail(str) ...
- IIS 处理高并发
1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Settings Queu ...
- 【ros】【bug】gtk2\3 冲突
ORBSLAM2首次运行出现GTK冲突. Gtk-ERROR **: GTK+ 3 symbols detected. Using GTK+ 2.x and GTK+ 3 in the same pr ...
- uvm_tlm_if_base——TLM1事务级建模方法(三)
文件: src/tlm1/uvm_tlm_ifs.svh 类: uvm_tlm_if_base 这个类没有派生自任何类,在类的中,定义了三类接口:第一类是阻塞性质的普通方法(task),put, ge ...
- EOS签名R值过大导致报错"is_canonical( c ): signature is not canonical"
简要 EOS中规定签名的R和S必须同时小于N/2才是合法的签名. 详细 EOS签名交易相对BTC和ETH来说,对签名的要求更加严格了. BTC中bip62规定了((Low S values in si ...