php匿名类的使用,stdClass,anonymous

https://www.php.net/manual/zh/language.oop5.anonymous.php

创建一次性的简单对象。
定义:

$obj=new class{};
// class名为: 'class@anonymous'+chr(0)+php文件路径+行数$列数
echo get_class($obj);

可以看出类名与文件所在行列相关,即同一个位置实例出来的类为同一个类.

$newClass=function(){
    return new class{};
};
$obj=new class{};
$newClass()==$newClass(); // 相等
$newClass()!=$obj;
$anonymous=new class{};// 第2行13列
echo get_class($anonymous); 
// out: class@anonymous\00/Volumes/Data/PhpProject/Study/code/anonymous.php:2$13

初始化

实例化

$obj=new class('abc'){
    public function __construct($args){
        var_dump($args);// abc
    }
};

json_encode

匿名函数可以json_encode.但反序列只能转成 stdClass .

$obj=new class{
    public $name="arkin";
};
echo $code= json_encode($obj);
var_dump(json_decode($code));// stdClass

serialize

serialize不允许序列化匿名类.如果有序列化需求的不要使用匿名类.

$obj=new class{
    public $name="arkin";
};
echo serialize($obj); // 报Fatal error

可以某个版本可以序列化经过继承其他类的匿名类
7.4 会可以序列化,但没什么用.不能反序列化,

$obj=new class extend ArrayObject{
    public $name="arkin";
};
echo serialize($obj); // 

原作者:阿金
本文地址:https://hi-arkin.com/archives/php-anonymous-stdClass.html

标签: php anonymous class stdClass

(本篇完)

评论