__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. [EffectiveC++]item27:尽量少做转型动作

  2. 02-urllib库的get请求方式

    对于urllib中的get请求方式,可以直接传入url的连接即可访问页面,但是对于要传入关键字的话,也可以用quote进行编码再传入. 案例如下: #get请求搜索参数如何添加 import urll ...

  3. PHP设计模式系列 - 策略模式

    策略模式: 策略模式设计帮助构建的对象不必自身包含逻辑,而是能够根据需要利用其他对象中的算法. 使用场景: 例如有一个CD类,我们类存储了CD的信息. 原先的时候,我们在CD类中直接调用getCD方法 ...

  4. Android开发经验02:Android 项目开发流程

    Android开发完整流程:   一.用户需求分析 用户需求分析占据整个APP开发流程中最重要的一个环节.一款APP开发的成功与否很大程度都决定于此.这里所说的用户需求分析指的是基于用户的要求所进行的 ...

  5. LayIM.AspNetCore Middleware 开发日记(一)闲言碎语

    前言 前几天写博客的时候突然看见了历史上的今天.不禁感慨时光如梭,这系列博客后来被我标注了已经过时,但是还有很多小伙伴咨询我.既然过时就要更新,正好 .NET Core 也出来很久了,于是乎想到把La ...

  6. regex_match

    原型:bool regex_match(InputSequence[,MatchResults] , Regex[ , Flags]); 当模式匹配整个输入序列成功时,返回的是true,否则返回fal ...

  7. Spring源码分析(二十)准备环境

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. prepareRefresh函数主要是做些准备工作,例如对系统属性及环 ...

  8. laravel5.5源码笔记(七、数据库初始化)

    laravel中的数据库也是以服务提供者进行初始化的名为DatabaseServiceProvider,在config文件的providers数组中有写.路径为vendor\laravel\frame ...

  9. [控件] Firemonkey 跨平台 Toast

    控件说明:一个简单的讯息提示功能,使用 FMX 基本控件,因此支持 Win, macOS, iOS, Android 平台. 已知问题:如果使用了 WebBrowser, MapView... 等原生 ...

  10. C++快速开发样本工程的建立--简介

    背景 在开发项目过程中,一些功能库能反复被写被用,可以写成库被重用: 但是行业业务也随着换项目,每次重新写一次,如果把一些功能业务和框架绑定,配置绑定,只需要添加,修改,增加业务功能,就可以搭建C++ ...