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="李四";
}

OOP的魔术方法的更多相关文章

  1. php部分---面向对象静态、抽象类、oop接口、加载类、魔术方法、关键字。

    静态  static关键字 普通成员普通成员是属于对象的 静态成员静态成员是属于类的 普通方法里面可以调用静态成员静态方法里面不能调用普通成员self关键字 在类里面代表该类 普通类class Ren ...

  2. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

  3. php中的魔术方法

    __construct 构造器是一个魔术方法,当对象被实例化时它会被调用.在一个类声明时它常常是第一件做的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方法样继承.如果我们 ...

  4. 面向对象与面向过程 $this的注意事项和魔术方法set和get

    一.面向对象与面向过程的区别: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程,强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象.面向对象更加强调运用人类在日常的思维逻辑 ...

  5. PHP 中的 9 个魔术方法

    这个标题有点牵强因为php有不只9种魔术方法, 但是这些将会引导你使用php魔术方法一个好的开始.它可能魔幻,但是并不需要魔杖. 这些'魔术'方法拥有者特殊的名字,以两个下划线开始,表示这些方法在ph ...

  6. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

  7. PHP开发者必须了解的9个魔术方法

    这些'魔术'方法拥有者特殊的名字,以两个下划线开始,表示这些方法在PHP特定事件下将会被触发.这可能听起来有点自动魔法但是它真的很酷的,我们已经看过一个简单的例子在 last post,即我们使用一个 ...

  8. PHP基础知识之魔术方法

    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sle ...

  9. 前端学PHP之面向对象系列第二篇——魔术方法

    × 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...

随机推荐

  1. Python之excel文件追加内容

    首先要安装三个模块:xlrd,xlwt,xlutils 命令:pip install xlrd xlwt xlutils 示例代码: #!/usr/bin/env python # -*- codin ...

  2. JS去除掉字符串前后空格

    1. 推荐使用jquery已封装好的方法,非常简单 $.trim(str) jquery的内部实现如下, function trim(str){ return str.replace(/^(\s|\u ...

  3. Django学习笔记(1)--第一个项目

    操作系统:Windows Python版本:python3.6 前置工作: pip install virtualenvwrapper #安装虚拟环境管理包 1.创建虚拟环境 mkvirtualenv ...

  4. mysql容灾备份脚本

    一,环境需求 **安装前准备 操作系统环境:Centos 7.2 [root@localhost soft]# rpm -qa | grep mariadb [root@localhost soft] ...

  5. 【故障公告】SendCloud 邮件发送服务故障造成大量 QQ 邮箱收不到邮件

    抱歉,由于我们所使用的搜狐旗下的 SendCloud 邮件发送服务出现故障,今天上午大量发往 @qq.com 邮箱的邮件无法正常发送,从 SendCloud 管理控制台看这些邮件一直处于“请求中”的状 ...

  6. 03SpringBoot用JdbcTemplates访问Mysql

    03SpringBoot用JdbcTemplates访问Mysql 文章指导 学习笔记 学习代码 初始化mysql -- create table `account` DROP TABLE `acco ...

  7. 【问题解决方案】查看Python安装了哪些库(pandas, matplotlib等等)

    查看方法: 一句命令:cmd打开终端后键入pip list END

  8. echarts实时数据图表

    import React, { PureComponent } from 'react'; import ReactEcharts from 'echarts-for-react'; import m ...

  9. 小程序组件中有bindinput监听报异常

    真机上有问题,ide上是没问题的,   组件有处理函数,结果异常说页面没有处理函数,加上处理函数后就不报异常了.

  10. 定时任务调度工作(学习记录 四)schedule与scheduleAtFixedRate的区别

    根据两种情况来看区别 一.首次计划执行的时间早于当前的时间 1.schedule方法 “fixed-delay”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...