精华内容
下载资源
问答
  • 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 2。__destruct() 当删除一个对象或对象操作终止时被调用。 3。__call() 对象调用某个方法, 若方法存在,则直接调用; ...
  • PHP魔法函数与魔法变量0x00 写在前面的话0x01 魔法函数0x02 魔法变量 0x00 写在前面的话 刚刚研究了一下PHP的序列化与反序列化,并且了解了PHP反序列化漏洞 ...

    0x00 写在前面的话

    刚刚研究了一下PHP的序列化与反序列化,并且了解了PHP反序列化漏洞

    (https://blog.csdn.net/weixin_40950781/article/details/100806729),在PHP反序列化漏洞中,

    主要用到的是PHP的魔法函数,该漏洞为PHP程序的逻辑漏洞,很难发现,也很难避免,总结一下

    PHP常用的魔法函数与魔法变量

    0x01 魔法函数

    函数名调用
    __construct()实例化对象时被调用。当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
    __destruct()当删除一个对象或对象操作终止时被调用。
    __call()对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。
    __get()读取一个对象的属性时.若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
    __set()设置一个对象的属性时.若属性存在,则直接赋值;若不存在,则会调用__set函数。
    __toString()打印一个对象的时被调用。如echo $obj;或print $obj;
    __clone()克隆对象时被调用。如:$t=new Test(); $t1=clone $t;
    __sleep()serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
    __wakeup()unserialize时被调用,做些对象的初始化工作。
    __isset()检测一个对象的属性是否存在时被调用。如:isset($c->name)。
    __unset()unset一个对象的属性时被调用。如:unset($c->name)。
    __set_state()调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
    __autoload()实例化一个对象时,如果对应的类不存在,则该方法被调用。

    0x02 魔法变量

    PHP 向它运行的任何脚本提供了大量的预定义常量。

    不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

    有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

    例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

    变量名作用
    LINE返回文件中的当前行号。
    FILE返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP 4.0.2 起,FILE 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
    FUNCTION返回函数名称(PHP4.3.0新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的。
    CLASS返回类的名称(PHP4.3.0 新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的。
    METHOD返回类的方法名(PHP5.0.0新加)。返回该方法被定义时的名字(区分大小写)。
    DIR文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
    CLASS类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。
    TRAITrait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
    NAMESPACE当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

    参考:https://www.jb51.net/article/61347.htm

    展开全文
  • 魔术函数 1、__construct() 实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 <?php class Test { public function __construct() { ...

    魔术函数

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

    <?php
      
    
    
    class Test  
    {  
    
    public function __construct()  
    {  
        echo "__construct <br>";  
    } 
    public function Test()  
    {  
        echo "Test <br>";  
    } 
    
    }  
      
    $t = new Test();  

    输出:__construct 
    如果隐藏__construct函数,则输出:Test 

     

    2、__destruct()
    当删除一个对象或对象操作终止时被调用。

    当执行die时,__destruct会被调用;

     

    3、__call()
    对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。

    <?php
      
    class Test  
    {  
    
        public function __call($Key, $Args)  
        {  
            echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true);  
        }  
    }  
    $t = new Test();   
    $t->notExit('ok','go');  
    die;
    

    4、__get()
    读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。

    class Test  
    {  
    
    public function __set($key,$value)  
    {  
    echo '对.$key . '附值'.$value;  
    } 
    public function __get($key)  
    {  
       echo $key . '不存在'; 
    }
     
    }  
      
    $t = new Test();  
    $t->name = 'ok';
    
    echo $t->name; 
    

    5、__set()
    设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。

    6、__toString()
    打印一个对象的时被调用。如echo $obj;或print $obj;

    
    class Test
    {
    public function __toString()
    {
    return “打印 Test”;
    }
    }
     
    $t = new Test();
     
    echo $t;

    运行echo $t;的时候,就会调用$t->__toString();从而输出
    打印 Test

    7、__clone()

    __clone()
    克隆对象时被调用。如:$t=new Test();$t1=clone $t;

    class Test  
    {  
      
    public function __clone()  
    {  
    echo “我被复制了!”;  
    }  
    }  
      
    $t = new Test();  
    $t1 = clone $t;  

    程序输出:
    我被复制了

    8、__sleep() serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

    9、__wakeup() unserialize时被调用,做些对象的初始化工作。

    10、 __isset() 检测一个对象的属性是否存在时被调用。如:isset($c->name)。

    11、__unset() unset一个对象的属性时被调用。如:unset($c->name)。

    12、__set_state() 调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

    13、__autoload() 实例化一个对象时,如果对应的类不存在,则该方法被调用。

    魔术常量

    1. __LINE__
      返回文件中的当前行号。
    2. __FILE__
      返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
    3. __FUNCTION__
      返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    4. __CLASS__
      返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    5. __METHOD__
      返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
    展开全文
  • 魔术函数 1。__construct()  实例化对象时被调用,  当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 2。__destruct()  当删除一个对象或对象操作终止时被调用...

    魔术函数

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

    2。__destruct() 
    当删除一个对象或对象操作终止时被调用。

    3。__call() 
    对象调用某个方法, 
    若方法存在,则直接调用; 
    若不存在,则会去调用__call函数。

    4。__get() 
    读取一个对象的属性时, 
    若属性存在,则直接返回属性值; 
    若不存在,则会调用__get函数。

    5。__set() 
    设置一个对象的属性时, 
    若属性存在,则直接赋值; 
    若不存在,则会调用__set函数。

    6。__toString() 
    打印一个对象的时被调用。如echo $obj;或print $obj;

    7。__clone() 
    克隆对象时被调用。如:$t=new Test();$t1=clone $t;

    8。__sleep() 
    serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

    9。__wakeup() 
    unserialize时被调用,做些对象的初始化工作。

    10。__isset() 
    检测一个对象的属性是否存在时被调用。如:isset($c->name)。

    11。__unset() 
    unset一个对象的属性时被调用。如:unset($c->name)。

    12。__set_state() 
    调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

    13。__autoload() 
    实例化一个对象时,如果对应的类不存在,则该方法被调用。

    魔术常量

    1。__LINE__ 
    返回文件中的当前行号。

    2。__FILE__ 
    返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

    3。__FUNCTION__ 
    返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

    4。__CLASS__ 
    返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

    5。__METHOD__ 
    返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

     

    展开全文
  • PHP魔法常量

    2020-05-25 20:57:58
    PHP魔术常量 PHP 向它运行的任何脚本提供了大量的预定义常量。 __LINE__: 文件中的当前行号 <?php echo '这是第 " ' . __LINE__ . ' " 行'; ?> __FILE___: 文件的完整路径(绝对路径)和文件名。如果用在被...

    PHP魔术常量

    PHP 向它运行的任何脚本提供了大量的预定义常量。

    __LINE__:

    文件中的当前行号

    <?php
    echo '这是第 " '  . __LINE__ . ' " 行';
    ?>
    
    __FILE___:

    文件的完整路径(绝对路径)和文件名。如果用在被包含文件中,则返回被包含的文件名。

    <?php
    echo '该文件位于 " '  . __FILE__ . ' " ';
    ?>
    
    该文件位于 " D:\Wampserver\www\workspace\hello\hello.php " 
    

    __DIR__:

    文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

    <?php
    echo '该文件位于 " '  . __DIR__ . ' " ';
    ?>
    
    该文件位于 " D:\Wampserver\www\workspace\hello " 
    
    __FUNCTION__:

    函数名称

    <?php
    function test() {
        echo  '函数名为:' . __FUNCTION__ ;
    }
    test();
    ?>
    
    函数名为:test
    
    __CLASS__:

    类名称

    <?php
    class test {
        function _print() {
            echo '类名为:'  . __CLASS__ . "<br>";
            echo  '函数名为:' . __FUNCTION__ ;
        }
    }
    $t = new test();
    $t->_print();
    ?>
    
    类名为:test
    函数名为:_print
    
    __NAMESPACE__

    当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

    __METHOD__

    类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

    __TRAIT__

    Trait 的名字.从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

    展开全文
  • 魔术函数 1。__construct() 实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 2。__destruct()当删除一个对象或对象操作终止时被调用。 3。__call...
  • php 魔术函数常量一览表
  • __autoload魔法函数

    2016-08-25 10:11:20
    __autoload魔法函数的例子和注意事项
  • PHP中获取当前类名、方法名、函数名的几个魔法常量(第一次尝试用markdown写博客)关于常用魔术常量的介绍可以直接参考PHP手册:连接 附上一个demo: ···php
  • 文件包含 include ‘demo.php’; ... ...魔法常量 _ _ FILE_ _:当前文件路径+文件名 _ _ LINE_ _:当前行号 _ _ FUNCTION_ _:当前函数名 _ _ CLASS_ _:当前类名 _ _ METHOD_ _:当前方法名
  • 常量定义 const x, s = 1, "abc" func main() { const a = 1 { ...常量的定义跟变量差不多,我们可以进行类型推断,可以同时定义多个,可以在函数内部定义在包块内定义。 const x int32 = 100 ...
  • PHP预定义常量(魔法常量

    千次阅读 2018-12-21 14:07:07
    __LINE__ 文件中的当前行号 __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 ...如果用在被包括文件中,则返回被包括的文件所在的目录。...函数名称(PHP 4.3.0...
  • 目录 文章目录 目录 数学函数 1. abs(__x) 函数 说明:返回数字的绝对值。 2. fabs(__x) 函数 说明:返回数字的绝对值。如math.fabs(-5) 返回5.0。 3. ceil(__x) 函数 说明:返回一个大于或等于 x 的的最小整数。 4....
  • php中与变量对应的就是常量常量是分系统常量、框架常量、及自定义常量 定义常量可以使用以下 define("MY_FIELD",123); echo MY_FIELD;// 输出123 // 如果定义常量是一个变量 $name = "TEST"; define($name,...
  • php魔法常量

    2015-10-25 21:49:00
    有七个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下: 名称说明 __LINE__ 文件中的当前行号。 __...
  • 向当前模块添加一些(是) / 风格的魔法常量。 包括简单的测试。 学分 这段代码几乎完全基于 [this Stackoverflow post](基于 )。 为什么??? 因此,您可以编写这样的日志记录功能,例如: var colors = ...
  • 1:魔法函数  __construct() 实例化对象时被调用。  当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。  __destruct() 当删除一个对象或对象操作终止时被调用。 ...
  • php5 魔法函数 魔法变量 魔术函数 1。__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 2。__destruct() 当删除一个对象或...
  • PHP魔法函数与变量

    2014-09-22 09:45:00
    __invoke() 该魔术方法会在将一个对象作为函数调用时被调用: __callStatic() 则会在调用一个不存在的静态方法时被调用。 PHP魔法函数与变量 ...1:魔法函数 __construct() 实例化对象时被调用。 ...
  • Java 开发技巧:减少魔法值的使用

    千次阅读 2020-04-23 07:53:00
    2.2 使用接口 既然我们使用了静态常量那么我们可以将魔法值封装入接口也是可以的。 public interface Gender { String FEMALE = "0"; String MALE = "1"; } 2.3 使用枚举 但是接口的意义在于提供抽象的...
  • 不要再使用魔法值了!

    千次阅读 2019-11-12 15:12:20
    今天在review代码的时候,发现一个星期前遗留在代码块内的魔法值还未被删除!在侥幸没被拉出去挨三十大板的同时也写一篇文章吧,希望看过的同学们不要犯这样的错误啦。 魔法值是什么? 所谓魔法值,是指在代码中直接...
  • 函数虽然没有参数传入,但实际上编译器自动隐含的传入 this 指针; 由于 const Car car 被申明为常量实例,导致 car 实例所引用的 weight 函数的 this 指针也需要为 const 修饰; 怎么做? 将 const int &...
  • 一、魔术函数(13个) 1、__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 2、__destruct() 当删除一个对象或对象操作终止...
  • 8.自定义函数

    2016-11-27 17:56:45
    1、标准函数 即系统内置函数 2、自定义函数 (1)采用function创建函数,不能跟系统内置函数重名 (2)函数有个特性,即必须被调用,才可以执行 (3)对无参数函数而言,无返回就是return 公式——...
  • 9.6、魔法常量

    2012-12-03 16:57:00
    魔法常量】PHP 实现了一些所谓的魔法常量,他们并不真的是常量,因为这些魔法常量会根据使用的场合改变值。...?...
  • 第1章 C魔法概览 /2 1.1 例说编程语言 2 1.2 用C语言编程的基本注意事项 6 1.3 主流C语言编译器介绍 8 1.4 关于GNU规范的语法扩展 10 1.5 用C语言构建一个可执行程序的流程 11 1.6 本章小结 12 第2章 学习...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,424
精华内容 2,569
关键字:

魔法函数魔法常量