PHP中的stdClass:它是什么以及如何使用(教程)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP中的stdClass:空对象的魔法



如果你曾经用PHP编写过代码,那么你肯定遇到过这样的情况:你需要快速创建一个对象,但手头没有现成的类。或者你从数据库获取数据,数据以对象形式返回,但你不明白它的属性从何而来。熟悉吗?欢迎来到stdClass的世界——PHP内置的一个类,它就像一个用于数据的“空容器”。



在本文中,我们将详细讲解什么是stdClass,为什么需要它,以及如何创建和使用它。你将了解它与普通数组的区别,并获得可以立即在代码中应用的实用示例。我们开始吧!



什么是stdClass?



stdClass(“standard class”的缩写)是PHP中的一个内置空类。它没有方法、属性或预定义的行为。它的存在仅仅是为了让你无需编写自己的类就能“即时”创建一个对象。



简单来说,它是一个匿名对象,你可以在任何时候为其填充属性。如果你曾经写过$obj = new stdClass();,那么你已经使用过它了。



<?php$obj = new stdClass();$obj->name = "Alexey";$obj->age = 28;echo $obj->name; // 输出:Alexey?>


在这个例子中,我们创建了一个stdClass对象并动态地给它添加了两个属性。无需提前声明任何类——PHP会自动创建一切。



为什么需要stdClass?



乍一看,stdClass可能像一个权宜之计。为什么要使用对象,而不是使用数组呢?实际上,它有几个重要的用途:



  • 处理JSON。当你通过json_decode()解码JSON且不传递第二个参数时,PHP会返回一个stdClass对象。这是标准行为。
  • 临时数据结构。如果需要快速以对象形式传递一组数据(例如,传递给一个期望接收对象的函数),stdClass是理想的选择。
  • API兼容性。许多库和框架期望接收对象而不是数组。stdClass让你轻松适应。
  • 原型开发。当你编写原型并且不想花时间创建完整的类时,stdClass可以救急。


重要的是要理解:stdClass不适用于复杂的逻辑。如果你需要方法、继承或封装,请创建你自己的类。



如何创建stdClass对象?



有几种方法可以创建stdClass对象。我们逐一介绍。



1. 通过new操作符

最直接的方法是使用new stdClass():



<?php$user = new stdClass();$user->name = "Maria";$user->email = "maria@example.com";?>


2. 从JSON创建

使用json_decode()解码JSON时(不带true标志),你会得到一个stdClass对象:



<?php$json = '{"name":"Ivan","age":30}';$obj = json_decode($json);echo $obj->name; // Ivanecho get_class($obj); // stdClass?>


3. 类型转换 (type casting)

可以使用(object)将数组转换为对象:



<?php$array = ["name" => "Olga", "city" => "Moscow"];$obj = (object) $array;echo $obj->city; // Moscow?>


请注意:当转换带有数字键的数组时,这些键将变得不可访问(PHP会将它们转换为属性,但你必须通过花括号来访问它们)。



stdClass vs 数组:如何选择?



这是一个永恒的问题。让我们来比较一下:



博客

书籍推荐

标准 stdClass