PHP几种常见魔术方法与魔术变量解析
先不多说,直接上代码,如下:
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几种常见魔术方法与魔术变量解析的更多相关文章
- PHP中的魔术方法和魔术常量
看上去好像挺烦人,但只要通过例子测试一下,就明白了.不做测试,只是看,第二天还是不明白.当然我在抄其他人的日志,然后希望能是自己的理解就好,原文地址PHP的魔术方法和魔术敞亮简介和使用--LaraBo ...
- php预定义变量,超全局变量,魔术方法,特殊函数变量使用
<?php /* * 本代码全部为测试函数代码,部分注释和写实例 * * 修改php.ini variables_order=”EGPCS” * 请注意$_REQUEST在优先级传参的时候会造成 ...
- PHP魔术方法和魔术变量总结
从php5以后的版本,类就可以使用魔术方法了.PHP规定以两个下划线开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法. 目前php已有的魔术方法有 __c ...
- php -- 魔术方法、魔术常量 简单介绍
魔术方法:PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀.魔术方法: 1. __construct() 类的默认构造方法,如果__con ...
- PHP魔术方法和魔术常量介绍及使用
魔术方法(Magic methods) PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __des ...
- php 魔术方法和魔术常量
魔术方法:PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀.魔术方法: 1. __construct() 类的默认构造方法,如果__con ...
- PHP魔术方法和魔法变量详解
一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对 ...
- php魔术方法和魔术常量
1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一 ...
- 转:Java实现几种常见排序方法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...
随机推荐
- Pig集群安装
1.安装hadoop 这个之前已经写过 2.下载Pig,解压 3.保证Java和Hadoop已经在/etc/profile中配置 4.配置Pig安装目录 export PIG_INSTALL=/hom ...
- django导入/导出原始数据
1.使用dumpdata命令导出指定app对应数据库中的数据: python manage.py dumpdata your_app --indent 4 > your_app/fixture ...
- netstat 常用方法
netstat简介 netstat是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表,实际的网络连接以及每一个网络接口设备的状态信息,netstat用于显示与IP,TCP,UDP和ICMP协 ...
- Angular实现多标签页效果(路由重用)
1.需求 做了几年的MES系统,从ASP.NET WebForm至MVC,系统决定了用户界面必须为标签页方式实现,因为用户在进行一项操作的时候很有可能会进行其它的操作,比如查询之类的.如果按MVC的方 ...
- 深入浅出SharePoint2012——安装Report Service
安装顺序 Microsoft .NET Framework 3.5 SP1 report service installation,pls SQLServer2008R2SP1-KB2528583-x ...
- December 18th 2016 Week 52nd Sunday
May your love soar on the wings of a dove in flight. 愿你的爱乘着飞翔中的白鸽,展翅高飞. May my life soar on the wing ...
- Shortest Paths
最短路径 APIs 带权有向图中的最短路径,这节讨论从源点(s)到图中其它点的最短路径(single source). Weighted Directed Edge API 需要新的数据类型来表示带权 ...
- 中间人攻击利用框架bettercap测试
0x00前言 上篇提到内网渗透很有趣,这次就从一款新工具说起: bettercap 0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名 ...
- Linux中从oracle官网下载jdk文件不是标准的gzip格式文件问题
首先你要知道,在linux系统中,文件类型跟后缀名无关,后缀名只是为了方便识别,所以你下载的压缩包可能是tar.gz格式的,也有可能是tar.bz2或tar.xz格式,因为可能别人压缩之后不小心改错了 ...
- Maven编译Java程序配置
Hive 需要在工程里添加的Jar包: hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar $HIVE_HOME/lib/hive-exe ...