在 PHP 中为 stdClass 对象设置命名空间

Posted

技术标签:

【中文标题】在 PHP 中为 stdClass 对象设置命名空间【英文标题】:Setting namespace for stdClass object in PHP 【发布时间】:2012-02-25 04:50:51 【问题描述】:

有谁知道是否可以在用户定义的 stdClass 对象上设置命名空间。

我想做的是将类的所有私有属性以getter方法的形式作为对象返回。

我找到了一种可能的解决方案,我可以这样做;

public function getDataItems() 
  $dataObj = new stdClass;
  $dataObj->image_id   = $this->image_id;
  $dataObj->image_name = $this->image_name;
  $dataObj->name       = $this->name;
  $dataObj->email      = $this->email;
  $dataObj->company    = $this->company;

  return $dataObj;

我唯一的问题是这个函数所在的类正在使用命名空间,因此我需要以某种方式将相同的命名空间分配给这个 $dataObj 对象。

有谁知道我该怎么做或者是否有可能?

【问题讨论】:

【参考方案1】:

也许您想反其道而行之,让 stdClass-Object 的命名空间显式化?这可以通过任一方式完成

use \stdClass

$dataObj = new \stdClass();

顺便说一句。 - 不,一旦定义了类的命名空间,就无法更改它。

如果您需要从另一个类的私有字段访问值,您可能需要检查ReflectionProperty 内置类(请参阅http://php.net/manual/en/reflectionproperty.getvalue.php)。

【讨论】:

所以,如果上述方法所在的类是使用命名空间foo;我不能让 $dataObj 使用相同的命名空间吗? $dataObj = new \stdClass();那成功了!谢谢你,奇迹史密斯! :) 关于命名空间的 PHP 文档:nl.php.net/manual/en/language.namespaces.basics.php

以上是关于在 PHP 中为 stdClass 对象设置命名空间的主要内容,如果未能解决你的问题,请参考以下文章

如何在创建对象时为 stdClass 对象设置属性

PHP stdClass类

PHP的stdClass

PHP laravel 返回空对象 {}

如何在 php 中对以下数组/stdclass 对象进行排序? [复制]

PHP 数组 stdClass 对象 - 回声值