__construct:构造函数,一旦创建对象都就会自动调用

__call:当调用了未定义的方法时会自动触发

__set:当给类外部不可访问的属性设置值时会自动触发

__get:当获取类外部不可访问的属性时会自动触发

__isset:当对类外部不可访问的属性使用了isset()或empty()时会自动触发

__unset:当对类外部不可访问的属性使用了unset()时会自动触发

__destruct:当对象结束其生命周期时就会自动触发

<?php
header("content-type:text/html;charset=UTF-8");
class Magic{
private $testGet; //私有测试__get魔术方法的属性
private $testSet; //私有测试__set魔术方法的属性
private $testIsset; //私有测试__isset魔术方法的属性
private $testUnset; //私有测试__unset魔术方法的属性
public static $a=1; //私有用于测试__clone魔术方法的常量 /**
* 测试构成方法,创建新对象时先调用此方法
*/
public function __construct(){
echo static::$a+2;
echo "这是构造函数"."<br>"."<br>";
} /**
* 测试isset方法,这是当不可访问的属性被调用了isset()或者empty()方法时会触发
*/
public function __isset($name){
echo "对不可访问属性:".$name."调用 isset() 或 empty()"."<br>"."<br>";
} /**
* 测试unset方法,这是当不可访问的属性被调用了unset()方法时会触发
*/
public function __unset($name){
echo "当对不可访问属性:".$name."调用unset()"."<br>"."<br>";
} /**
* 测试call方法,这是当调用了未定义的方法时会触发
*/
public function __call($method,$agrs){
echo "调用了不存在的方法:".$method."<br>"."这是接收的参数:";
print_r($agrs);
echo "<br>"."<br>";
} /**
* 测试set方法,这是当不可访问的属性被设置时会触发
*/
public function __set($name,$data){
echo "调用了不可设置的属性:".$name."<br>"."参数为:".$data."<br>";
} /**
* 测试get方法,这是当不可访问的属性被访问时会触发
*/
public function __get($name){
echo "调用了不可获取的属性:".$name."<br>"."<br>";
} /**
* 测试clone方法,这是类被克隆时会触发
*/
public function __clone(){
echo static::$a+1;
echo "我被克隆了"."<br>"."<br>";
} /**
* 测试析构方法,这是当在脚本关闭时被调用
*/
public function __destruct(){
echo "这是析构函数";
}
} $test=new Magic(); //实例化Magic类,触发构造函数 $test->callMethod('123'); //调用不存在的方法 $test->testSet=123; //设置类外部不可访问的属性 $test->testGet; //获取类外部不可访问的属性 $test2=clone $test; //克隆test类,开辟了另一份一模一样的属性和方法存储空间,但相互不会影响
isset($test->testIsset); //用isset执行类外部不可访问的属性
unset($test->testUnset); //用unset执行类外部不可访问的属性

php常用的魔术方法的更多相关文章

  1. php面向对象类中常用的魔术方法

    php面向对象类中常用的魔术方法   1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...

  2. PHP中常用的魔术方法

    我们在PHP中经常用到魔术方法,像构造方法,析构方法等等魔术变量,下面总结一下一些常用的魔术变量: __construct(),__destruct(),__clone(),__autoload(), ...

  3. PHP序列化、反序列化常用的魔术方法

    __wakeup() //使用unserialize时触发__sleep() //使用serialize时触发__destruct() //对象被销毁时触发__call() //在对象上下文中调用不可 ...

  4. php中的重载以及几个常用的魔术方法示例

    在面向对象语言中,有一个很重要的概念——overload,即重载.所谓重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同.但是,在php中,这个概念跟大多面向对象语言中的“ ...

  5. PHP常用的魔术方法及规则

    1. __construct 具有构造函数的类会在每次创建新对象时先调用此方法;初始化工作执行.2. __desstruct 对象的所有引用都被删除或者当对象被显式销毁时执行.3.__call()在对 ...

  6. PHP面向对象中常用的关键字和魔术方法

    PHP面向对象中常用的关键字 final        1.final不能修饰成员属性(类中常量不是用这个关键字)        2.final只能修饰类和方法 作用:            使用fi ...

  7. php中的常用魔术方法总结

    以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...

  8. PHP之魔术方法

      PHP中的魔术方法: PHP的魔术方法主要是在特定的条件下执行相应的魔术方法.这和很多框架中的钩子函数有些类似,不同的是,钩子函数是在生命周期的某个周期内自动执行,而魔术方法是在触发某种条件下自动 ...

  9. Python 类的魔术方法

    Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic method ...

随机推荐

  1. spark-submit提交参数设置

    /apps/app/spark-1.6.1-bin-hadoop2.6/bin/spark-submit --class com.zdhy.zoc2.sparksql.core.JavaSparkSq ...

  2. 华为18.9.5校招笔试题AK

    26进制加法(一) 'a'-'z'代表十进制的0-25,求26进制加法.例如 'z'+'bc'= 'cb' 博主思路: 首先将长度不同的字符串高位补'a' 从低位开始将字符转换为10进制相加 计算进位 ...

  3. ascii2native 转码 解码

    //把十六进制的编码转为原码function asciiHex2native(strAscii) { var output = ""; var posFrom = 0; var p ...

  4. HashMap,LinkedHashMap和Hashtable类的深入剖析与理解

    上一篇文章写了一些关于HashMap以及HashMap的线程安全问题,这篇文章再来说说Map系列中HashMap,LinkedHashMap和Hashtable三者之间的差异以及该注意的地方. Has ...

  5. UVa 10213 - How Many Pieces of Land ?(欧拉公式)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. BZOJ4802:欧拉函数(Pollard-Rho,欧拉函数)

    Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Output 4 Soluti ...

  7. 1864. [ZJOI2006]三色二叉树【树形DP】

    Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...

  8. Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:“表“TableDetails”中列“IsPrimaryKey”的值为DBNull.

    解决办法一: 1.cmd 2.c:\Users\Administrator>cd c:\Program Files\MySQL\MySQL Server 5.7\bin 3c:\Program ...

  9. P1736 创意吃鱼法

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  10. canvas 绘制刮刮卡

    思路=> 用div来展示刮奖结果,用canvas绘制刮奖前展示的图片或者文字:将canvas叠在div上方,刮奖是只需要操作canvas配合touch事件即可简单完成. canvas刮奖可以用g ...