首页 > 编程语言 >php魔术方法(1)

php魔术方法(1)

时间:2022-12-25 15:01:17浏览次数:42  
标签:__ 触发 php unserialize username 魔术 序列化 方法

PHP 魔术方法

目录

概述:

PHP 魔术方法:一个预定义好的,在特定情况下自动触发的行为方法。

魔术方法相关进制:触发时机,功能,参数,返回指。

1、构造函数和析构函数。

__construct() 构造函数,在实例化一个对象时,首先会去执行的一个方法;

示例代码:

<?php
class User
{
    public $username;
    public function __construct($username)
    {
        $this->username = $username;
        echo "触发了构造函数";
    }
}

$test = new User("hongmao");    //实力化对象时触发构造函数 __construct()
$ser = serialize($test);                //序列化时不会触发
unserialize($ser);                      //反序列化时也不会触发
?>

__destruct() 析构函数,在对象的所有引用被删除或者当对象被显式销毁时执行的魔术方法。

示例代码:

<?php
class User{
   public function __destruct(){
      echo"触发了析构函数"."<br />";
   }
}

$test = new User("lantu");        //实例化对象结束后,代码运行完全会销毁,触发析构函数。
$ser = serialize($test);
unserialize($ser);       //反序列化后,触发析构函数。
?>

2、__sleep()

序列化serialize()函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,__sleep()会被先调用,然后才执行序列化操作。

触发时机:序列化serialize()之前。

功能:对象被序列化之前触发,返回需要被序列化存储的成员属性,删除不必要的属性。

参数:成员属性。

返回值:需要被序列化的存储的成员属性。

示例代码:

<?php
class User{
    const SITE = 'uusama';
    public $username;
    public $nickname;
    private $password;
    public function __construct($username,$nickname,$password)
    {
        $this->username = $username;
        $this->nickname = $nickname;
        $this->password = $password;
    }
    public function __sleep(){
        return array('username','nickname');
    }
}

$user = new User(a,b,c);
echo serialize($user);
?>

3、__wakeup()

unserialize() 会检查是否存在一个_ _wakeup()方法,如果存在,则先调用 _ _wakeup(),预先准备对象需要的资源。

触发时机:反序列化 unserialize() 之前

注:

_ _wakeup() 在反序列化unserialize()之前

_ _destruct() 在反序列化unserialize()之后

示例代码:

<?php
class User{
    const SITE = 'uusama';
    public $username;
    public $nickname;
    private $password;
    private $order;
    public function __wakeup(){
        $this->password = $this->username;
    }
}

$user_ser = 'O:4:"User":2:{s:8:"username";s:1:"a";s:8:"nickname";s:1:"b";};';
var_dump(unserialize($user_ser));
?>

标签:__,触发,php,unserialize,username,魔术,序列化,方法
From: https://www.cnblogs.com/paomianjiacha/p/17004041.html

相关文章