PHP几种常见魔术方法与魔术变量解析

简介: PHP几种常见魔术方法与魔术变量解析 先不多说,直接上代码,如下: 1 class Demo 2 { 3 private $str = 'str'; 4 5 //实例化时自动加载function 6 public function __constru.

PHP几种常见魔术方法与魔术变量解析

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

复制代码
 1 class Demo
 2 {
 3     private $str = 'str';
 4    
 5     //实例化时自动加载function
 6     public function __construct()
 7     {
 8         echo "start<br/>";
 9     }
10 
11     //__call()用来获取没有定义的function
12     public function __call($name, $arguments)
13     {
14         echo $name.'_call<br>';
15     }
16 
17     //获取私有变量
18     public function __get($name)
19     {
20         // TODO: Implement __get() method.
21         echo $this->$name.'_get<br/>';
22     }
23 
24     //通过关键字 clone 克隆一个对象时该对象调用__clone()方法
25     public function __clone()
26     {
27         // TODO: Implement __clone() method.
28     }
29 
30     //__set()设置私有变量的值
31     public function __set($name, $value)
32     {
33         // TODO: Implement __set() method.
34         $this->$name = $value;
35     }
36 
37     //————callStatic()调用没有被定义的static静态function
38     public static function __callStatic($name, $arguments)
39     {
40         // TODO: Implement __callStatic() method.
41         echo $name.'_classStatic';
42     }
43 
44     //删除类对象时候自动调用
45     public function __destruct()
46     {
47         // TODO: Implement __destruct() method.
48         echo "end";
49     }
50 
51 
52 }
53 
54 $class = new Demo();
55 $class->success();
56 $class->succ = 111;
57 echo $class->succ;
58 echo $class->str;
59 echo '<br>';
60 $obj = clone $class;
61 print_r($obj);
62 echo '<br>';
63 $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()方法同理,只是对没有定义的静态方法起作用。

 

几种常见的魔术变量:

复制代码
 1 namespace app;
 2 
 3 //__LINE__ 当前脚本行号
 4 echo __LINE__.'<br/>';
 5 
 6 //__FILE__ 文件的完整路径与文件名
 7 echo __FILE__.'<br/>';
 8 
 9 //__DIR__ 文件所在目录
10 echo __DIR__.'<br/>';
11 
12 class Test {
13     function demo(){
14         //__FUNCTION__ 函数名称 ,php5以后返回该函数被定义时的名字(区分大小写)
15         echo __FUNCTION__.'<br/>';
16 
17         //__CLASS__ 类名称,PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
18         //注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。
19         //当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
20         echo __CLASS__.'<br/>';
21 
22         //__METHOD__ 类的方法名,返回该方法被定义时的名字(区分大小写)
23         echo __METHOD__.'<br/>';
24 
25 
26         //__NAMESPACE__ 当前命名空间
27         echo __NAMESPACE__.'<br/>';
28     }
29 }
30 
31 (new Test())->demo();
32 
33 trait HelloWorld {
34     public function sayHello() {
35         //__TRAIT__ Trait 的名字  PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)
36         echo __TRAIT__.'<br/>';
37     }
38 }
39 
40 class TheWorldIsNotEnough {
41     use HelloWorld;
42 }
43 $o = new TheWorldIsNotEnough();
44 $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
复制代码

 

复制代码
相关文章
|
9天前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
|
4天前
|
存储 PHP 开发者
PHP中的命名空间深入解析
【5月更文挑战第20天】在现代PHP开发中,命名空间是管理代码和避免命名冲突的重要工具。本文将深入探讨PHP命名空间的概念、实现原理以及在日常开发中的应用技巧。我们将通过实例来说明如何有效地使用命名空间,并讨论它们与自动加载机制的协同工作,以及在面向对象编程中如何利用命名空间来增强代码的可维护性和可读性。
|
4天前
|
PHP 开发者
PHP中的命名空间深入解析
【5月更文挑战第20天】在PHP的世界中,命名空间是管理代码的重要工具,它允许开发者创建唯一的名称来避免命名冲突。本文将深入探讨PHP命名空间的概念、实现和使用,帮助读者更好地理解和应用这一技术。
|
6天前
|
存储 Java 程序员
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性,包括变量存储和垃圾回收。变量存储时,如`x = 10`,`x`指向内存中值的引用。垃圾回收通过引用计数自动回收无引用对象,防止内存泄漏。了解此机制可优化内存使用,避免循环引用等问题,提升程序效率和稳定性。深入学习内存管理对成为优秀Python程序员至关重要。
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
|
9天前
|
存储 PHP
【PHP入门】1.2-常量与变量
【PHP入门】1.2-常量与变量
【PHP入门】1.2-常量与变量
|
9天前
|
PHP 开发者
深入解析PHP的命名空间与自动加载机制
【4月更文挑战第30天】 在现代PHP开发实践中,命名空间和自动加载机制是模块化和代码复用的关键。本文旨在提供一个全面的视角来理解这两个概念如何协同工作以优化项目结构。我们将探讨命名空间解决代码冲突的方式,以及自动加载机制如何智能地按需加载类,从而减少内存占用和提升性能。
|
9天前
|
PHP 开发者
PHP中的命名空间深入解析
【4月更文挑战第30天】在PHP的编程世界中,命名空间是一个强大而灵活的工具,用于解决代码中的名称冲突问题。本文将深入探讨PHP命名空间的核心概念、实现原理以及在实际开发中的应用技巧,帮助开发者更好地理解和运用这一特性,提升代码的可维护性和复用性。
|
9天前
|
存储 数据库连接 PHP
【PHP开发专栏】深入解析PHP数据类型与运算符
【4月更文挑战第30天】本文深入探讨了PHP的编程基础——数据类型和运算符。PHP支持整型、浮点型、字符串、布尔型、数组、对象、资源等数据类型。运算符包括算术、字符串、赋值、比较、逻辑、位、错误控制及范围运算符。通过示例展示了如何计算圆面积、判断素数和求斐波那契数列,以帮助读者更好地理解和应用这些概念。
|
7天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
|
8天前
HuggingFace Tranformers 源码解析(4)
HuggingFace Tranformers 源码解析
54 0

推荐镜像

更多