php匿名类
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