1、构造函数:__construct():

构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数。

function __construct($name){
$this -> name = $name;
}

2、析构函数:__destruct():

①析构函数在对象被销毁释放之前自动调用;
②析构函数不能带有任何的参数;
③析构函数常用于对象使用完以后,释放资源,关闭资源等。

function __destruct(){
echo "over!";
}

3、 __set($key,$value):

给类私有属性赋值时自动调用,调用是给方法传递两个参数:需要设置的属性名、属性值

         function __set($key,$value){
if($key=='name'){
$this->$key=$value."(这是__set设置的文字!)";
return;
}
}

4、 __get($key):

给获取类私有属性时自动调用,调用是给方法传递一个参数:需要获取的属性名

           function __get($key){
return $this->$key;
}

5、 __isset($key):

外部使用isset()函数检测私有属性时,自动调用。
 >>>类外部使用isset();检测私有属性,默认检测不到(false)
 >>>所以,我们可以使用__isset()函数,在自动调用时,返回内部检测结果

function __isset($key){
  return isset($this->$key);
}

当外部使用isset($对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!

6、 __unset($key):

外部使用unset()函数删除私有属性时,自动调用;

function __unset($key){
  unset($this->$key);
}

当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理

7、__clone:

① 当使用clone关键字,克隆对象时,自动调用clone函数
 ② __clone()函数类似于克隆是使用的构造函数,可以给新克隆对象赋初值
 ③ 克隆函数里面的$this指的是新克隆的对象

  class Person{
public $name;
public $age;
function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
function __clone(){$this->name="李5";
} }
$zhangsan=new Person("张三",14);
$lisi=clone $zhangsan;

8、__tostring()

当使用echo等输出语句,直接打印对象时,调用 echo $zhangsan;那么, 可以指定__tostring()方法的返回值,返回值需要是字符串。
 则使用echo函数打印时,将会打印出__tostring()函数返回的字符串

function __tostring(){
  return "hahaha";
}
echo $zhangsan;

9、__call()

调用类中未定义或未公开的方法时,会自动执行__call()方法,自动执行时,会给call方法传递两个参数:
① 调用的方法名
② (数组)调用的方法的参数列表

     function __call($funcName,$funcParams){
echo "{$funcName}<br>";
print_r($funcParams);
}

10、__autoload()

① 这是唯一一个不在类中使用的魔术方法
② 当实例化一个不存在的类时,自动调用这个魔术方法
③ 调用时,会自动给__autoload()传递一个参数:实例化的类名
所以,可以实现 使用这个方法,自动加载类文件的功能:

function __autoload($className){
  include strtolower($className).".class.php"
}
$zhangdan=new Person("战三");
//本文件没有Person类,会自动执行__autoload加载person.class.php文件

11、__sleep():

① 当执行对象串行化(将对象通过一系列操作,转化为字符串的过程,称为串行化)的时候,会自动执行__sleep()函数;
② __sleep()函数要求返回一个数组,数组中的值,就是可以串行化的属性, 不在数组中的属性,不能被串行化。

function __sleep(){
  return array("name","age");
}

12、__wakeup()

① 当反串行化对象时,自动调用__wakeup()方法;
② 自动调用时,用于给反串行化产生的新对象的属性,进行重新赋值;

function __wakeup(){
  $this->name="李四";
}

最新文章

  1. 移动web开发之移动端真机测试
  2. VS 创建虚拟目录失败,映射到其他文件夹!
  3. 【转载】Linux下编辑生成.mo文件
  4. 不定义JQuery插件,不要说会JQuery
  5. Codeforces Beta Round #13 E. Holes 分块暴力
  6. js createElement
  7. 安装Windows2008操作系统 - 初学者系列 - 学习者系列文章
  8. mac下virtualbox配置全网通
  9. pythonのdjango 信号
  10. 性能测试工具jmeter的安装
  11. Warning: Failed to halt at after bootloader, forced stop at
  12. BAT的真的适合创业团队吗?
  13. 软件测试QA、QC、QM的关系与区别
  14. 云计算-MapReduce
  15. 软考历程(5)——extend 与 include
  16. logrotate日志管理工具
  17. (原)docker的一个“Driver aufs failed to remove...”问题的解决
  18. mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc
  19. Spring中application*的使用
  20. 关于OutputStream的write方法FAQ(from bbs.csdn.net)

热门文章

  1. go 把固定长度的数字写入字节切片 (byte slice),然后从字节切片中读取到并赋值给一个变量:
  2. Java之static静态关键字详解|final关键字详解
  3. VC 创建快捷方式
  4. JScrollPane 自动跟进 自动到滚动到最底部
  5. HTML 代码复用
  6. FastJSON解析Json字符串(反序列化为List、Map)
  7. linux实用技巧:在虚拟机vmware16软件上安装CentOs8.2虚拟机,重置可用源和安装输入法
  8. Elementui【tooltip】 在弹框关闭之后再次‘出现’的问题
  9. iOS 如何监听用户在手机设置里改变了系统的时间?
  10. .NET 云原生架构师训练营(权限系统 代码重构)--学习笔记