本文对一些php中的魔术方法进行总结,魔术方法顾名思义就是具备神奇功能的方法(function)。魔术方法通常在某些特定情况下自动触发,不能用实例化变量名->方法名()来主动触发。不同的魔术方法有不同的触发情况,魔术方法都以”__”两个下划线开头,一定要注意是“两个下划线”,如果写成一个下划线,不报错,但也不会被触发。

1.构造方法   __construct(参数){ }

该魔术方法,在实例化类时自动触发,不能主动触发。一般用于执行某些初始化任务,在一个类中,只能声明一个构造方法,下面我们用构造方法赋初始值。

class Person{
var $name;
var $age;
var $sex;
//构造方法
function __construct($name,$age,$sex)
{
//赋值
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
} function say()
{
echo "My name is ".$this->name.". I am ".$this->age." years old.".$this->sex." in sex.";
}
} //在实例化时传入参数 执行构造方法
$obj = new Person("ZhangSan","20","male"); //再调用say()方法
$obj->say();

最后的输出结果是:My name is ZhangSan. I am 20 years old.male in sex.

从上面的例子可以看出,构造方法在类被实例化时主动触发,并可以传入参数。

以下几种情况适合放在构造方法内:

①数据库类

使用数据库之前,必须先连接数据库。我们可以将连接数据库的代码放在构造方法里。

②分页类

每次计算分页之前,必须获取当前页数、计算总页数,就可以放在构造方法里。

③上传类

必须先获取上传的文件 $file = $_FILES['form_name'],它就可以放在构造方法里。

④绘图类

必须先创造一个画板,这个过程也可以放在构造方法。

2.析构方法   __destruct( ){ }

析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件, 释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显示销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似, 一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。

下面我们来看一下析构函数的具体应用:

class Student{

    function say()
{
echo "I am a student. ";
}
//析构方法
function __destruct()
{
echo "I am so happy.";
}
} //实例化类
$obj_s = new Student();
//调用say()方法
$obj_s->say();

最后的输出结果是:I am a student. I am so happy.

可以看到,我们并没有主动去调用析构方法,但却输出了析构方法的结果。是因为在调用类方法结束后会自动释放内存。在释放内存前,主动触发了析构函数。

最新文章

  1. c语言经典算法——查找一个整数数组中第二大数
  2. BeatifulSoup文档地址
  3. 20145304 Java第九周学习报告
  4. iOSQuartz2D-03-定制个性头像
  5. Qt Creator键盘快捷键速查
  6. Extjs4中的布局
  7. 向php提交数据及json
  8. 性能测试培训:帮你定位 Linux 性能问题的 18 个命令以及工具
  9. Open-Falcon第六步安装Dashboard(小米开源互联网企业级监控系统)
  10. EntityFramework优化:第一次启动优化
  11. SSM--spring框架
  12. Struts标签<bean:write><logic:iterate></logic:equal>的组合使用小例
  13. pygame-KidsCanCode系列jumpy-part1-如何组织复杂游戏的代码
  14. Qt5数据库
  15. Linux常用基本命令( tree, pwd, cd )
  16. PHP: Short URL Algorithm Implementation
  17. OA与ERP集成 可行?
  18. pyqt5简单登陆界面
  19. 【题解】洛谷P4145 花神游历各国(线段树)
  20. python设计模式之单例模式(二)

热门文章

  1. Asp.Net Core Cookie使用,Asp.net Core Cookie操作失效
  2. C# winform选择文件、选择文件夹、打开文件
  3. 基于redis5的session共享:【redis 5.x集群应用研究】
  4. Anaconda(二)
  5. 在centos7上用docker安装宝塔面板
  6. tf.tile()函数理解
  7. 双写mq后碰到没有消费问题记录
  8. Java8 特性
  9. VisualVM使用
  10. laravel jwt实践