原文地址:http://small.aiweimeng.top/index.php/archives/49.html

先不多说,直接上代码,如下:

 class Demo
{
private $str = 'str'; //实例化时自动加载function
public function __construct()
{
echo "start<br/>";
} //__call()用来获取没有定义的function
public function __call($name, $arguments)
{
echo $name.'_call<br>';
} //获取私有变量
public function __get($name)
{
// TODO: Implement __get() method.
echo $this->$name.'_get<br/>';
} //通过关键字 clone 克隆一个对象时该对象调用__clone()方法
public function __clone()
{
// TODO: Implement __clone() method.
} //__set()设置私有变量的值
public function __set($name, $value)
{
// TODO: Implement __set() method.
$this->$name = $value;
} //————callStatic()调用没有被定义的static静态function
public static function __callStatic($name, $arguments)
{
// TODO: Implement __callStatic() method.
echo $name.'_classStatic';
} //删除类对象时候自动调用
public function __destruct()
{
// TODO: Implement __destruct() method.
echo "end";
} } $class = new Demo();
$class->success();
$class->succ = 111;
echo $class->succ;
echo $class->str;
echo '<br>';
$obj = clone $class;
print_r($obj);
echo '<br>';
$class::end(); 运行结果:
start
success_call
111str_get clone
Demo Object ( [str:Demo:private] => str [succ] => 111 )
end_classStatic
endend

方法总结:

1. __set(),__get(),__isset(),__unset()可以归之为一类,适用于私有变量的设置、取值、判断、删除的操作。
2. __construct()构造函数,__desctruct()析构函数,实例化类的时候就会产生,有一点不同,构造在最前面,
析构函数在最后面
3. 当调用class中没有定义的方法时,会报错fail error,如果class中定义了__call(),会直接调用__call()方法进行操作。
例如:$class->success('data');类中的__call方法开始执行把参数转换为数组形式array([0] => 'data');
__callStatic()方法同理,只是对没有定义的静态方法起作用。

几种常见的魔术变量:

 namespace app;

 //__LINE__ 当前脚本行号
echo __LINE__.'<br/>'; //__FILE__ 文件的完整路径与文件名
echo __FILE__.'<br/>'; //__DIR__ 文件所在目录
echo __DIR__.'<br/>'; class Test {
function demo(){
//__FUNCTION__ 函数名称 ,php5以后返回该函数被定义时的名字(区分大小写)
echo __FUNCTION__.'<br/>'; //__CLASS__ 类名称,PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
//注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。
//当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
echo __CLASS__.'<br/>'; //__METHOD__ 类的方法名,返回该方法被定义时的名字(区分大小写)
echo __METHOD__.'<br/>'; //__NAMESPACE__ 当前命名空间
echo __NAMESPACE__.'<br/>';
}
} (new Test())->demo(); trait HelloWorld {
public function sayHello() {
//__TRAIT__ Trait 的名字 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)
echo __TRAIT__.'<br/>';
}
} class TheWorldIsNotEnough {
use HelloWorld;
}
$o = new TheWorldIsNotEnough();
$o->sayHello();

输出结果:

12
G:\phpstudy\PHPTutorial\WWW\phpDemo\03-08.php
G:\phpstudy\PHPTutorial\WWW\phpDemo
demo
app\Test
app\Test::demo
app
app\HelloWorld

PHP几种常见魔术方法与魔术变量解析的更多相关文章

  1. PHP中的魔术方法和魔术常量

    看上去好像挺烦人,但只要通过例子测试一下,就明白了.不做测试,只是看,第二天还是不明白.当然我在抄其他人的日志,然后希望能是自己的理解就好,原文地址PHP的魔术方法和魔术敞亮简介和使用--LaraBo ...

  2. php预定义变量,超全局变量,魔术方法,特殊函数变量使用

    <?php /* * 本代码全部为测试函数代码,部分注释和写实例 * * 修改php.ini variables_order=”EGPCS” * 请注意$_REQUEST在优先级传参的时候会造成 ...

  3. PHP魔术方法和魔术变量总结

    从php5以后的版本,类就可以使用魔术方法了.PHP规定以两个下划线开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法. 目前php已有的魔术方法有 __c ...

  4. php -- 魔术方法、魔术常量 简单介绍

    魔术方法:PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀.魔术方法: 1. __construct() 类的默认构造方法,如果__con ...

  5. PHP魔术方法和魔术常量介绍及使用

    魔术方法(Magic methods) PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __des ...

  6. php 魔术方法和魔术常量

    魔术方法:PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀.魔术方法: 1. __construct() 类的默认构造方法,如果__con ...

  7. PHP魔术方法和魔法变量详解

    一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对 ...

  8. php魔术方法和魔术常量

    1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一 ...

  9. 转:Java实现几种常见排序方法

    日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...

随机推荐

  1. d3js data joins深入理解

    Data joins 给定一个数据数组和一个 D3 selection  我们就可以attach或者说是'join'数组中的每个数据到selection中的每个元素上. 这将使得我们的数据和可视化元素 ...

  2. 古老的CSS同高列问题

    今日在网页设计时,遇到了希望页面的几列同高需求的实现问题,搜罗了一下google,找到以下文章,感觉不错,翻译过来,同时作为学习加深印象. https://css-tricks.com/fluid-w ...

  3. iOS设计模式 - 装饰

    iOS设计模式 - 装饰 原理图 说明 1. cocoa框架本身实现了装饰模式(category的方式实现了装饰模式) 2. 装饰模式指的是动态的给一个对象添加一些额外的职责,相对于继承子类来说,装饰 ...

  4. 安装SCOM2012在连接数据库时报错:" SQL Server 的安装版本不受支持"

       在SQL群集上有两个实例,分别为:SQLCSNET1\MSSQLSERVER1和SQLCSNET2\MSSQLSERVER2,在计算机sccmz上安装SCOM2012 SP1中的组件 管理服务器 ...

  5. 25个最佳的SSH命令

    参考文献地址(SSH原理与运用(一):远程登录): http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 参考文献地址(SSH原理与 ...

  6. Chapter 3 Top 10 List

    3.1 Introduction Given a set of (key-as-string, value-as-integer) pairs, then finding a Top-N ( wher ...

  7. VNC Viewer

    首先需要明确,什么事VNC , Virtual Network Computing ,VNC允许Linux系统可以类似实现像Windows中的远程桌面访问那样访问Linux桌面. 首先试试服务器装了V ...

  8. c++抽象类,纯虚函数

  9. Objective-C与JavaScript交互的那些事

    http://www.cocoachina.com/ios/20160127/15105.html 最近公司的运营瞎搞了个活动,其活动要服务端提供数据支持,web前端在微信公众账号内作为主要的运营阵地 ...

  10. P2668 斗地主

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: ...