【问题标题】:Understanding stdClass objects了解 stdClass 对象
【发布时间】:2015-06-12 11:22:51
【问题描述】:

好吧,我对 PHP 中的 stdClass 对象“有点”陌生,我正在尝试一些了解导出数据/创建 API 以从数据库中获取相关信息的信息。

所以,我想要的是让用户访问一些信息,比如数据库或 XML 文件(不是所有内容,只是某些部分)。 (在这种情况下,它是一个本地 sqlite3 文件),我想以 JSON 格式向用户提供数据。

我需要什么帮助?简而言之 - 我想从你那里得到一些建议,以比我已经得到的更聪明的方式解决“问题”。 (我想我的方式有点……丑陋的解决方案。

这是我导出的结构的当前导出(没有 JSON 编码):http://codepaste.net/965tgj

我在 php 文件中通过以下方式完成了此操作:($users 是来自 sqlite3.db 的实际数据,我完全理解如何使用,所以我精简了代码 :)

$users = array(
    array(
        "id" => 1,
        "user" => "Xavizus"
    ),
    array(
        "id" => 2,
        "user" => "Zariel"
    )
);

$obj = new stdClass();
$obj->auth = true;
$obj->usercount = 2;
$obj->users = array();

for($i =0; $i < $obj->usercount; $i++){
        $obj->users[] = new stdClass();
}

for($i = 0; $i < $obj->usercount; $i++) {
        $obj->users[$i]->id = $users[$i]['id'];
        $obj->users[$i]->user = $users[$i]['user'];
}

print_r($obj);

有没有更清洁的方法来做到这一点?或者这是我能做到的最干净的?

【问题讨论】:

  • 您应该定义自己的类并让构造函数接受初始化值。这样会干净很多。
  • 一定要测试你的stdClasses...
  • @jeroen 谢谢你的提示 :) (正如我之前所说的 - 我是 PHP 的新手,我还在学习 - 我不得不说 - 这是一个很棒的社区!

标签: php json object stdclass


【解决方案1】:

使用(object) 转换数组会更容易:

$obj = new stdClass();
$obj->auth = true;
$obj->usercount = count($users);
$obj->users = $users;

foreach($obj->users as &$user) {
    $user = (object)$user;
}

但是我会查看@jeroen 的评论:“您应该定义自己的类并让构造函数接受初始化值。这样会更简洁。”

class users {

    function __construct($users, $auth=true) {
        $this->auth = $auth;
        $this->usercount = count($users);        

        foreach($users as $user) {
            $this->users[] = (object)$user;
        }
    }
}

$obj = new users($users);

fetchArray() 分配时,您还可以将行数组转换为对象。

【讨论】:

  • 感谢您的出色解释 :) 没想到这个社区这么有帮助 :)
  • Okey - 我没有找到信誉按钮.... 编辑:Nvm.... 只需按下回答按钮并回答投票:)
【解决方案2】:

你可以在一个 for 循环中完成它吗?

而不是

for($i =0; $i < $obj->usercount; $i++){
        $obj->users[] = new stdClass();
}

for($i = 0; $i < $obj->usercount; $i++) {
        $obj->users[$i]->id = $users[$i]['id'];
        $obj->users[$i]->user = $users[$i]['user'];
}

你可以这样做

for($i =0; $i < $obj->usercount; $i++){
        $newObject = new stdClass();
        $newObject->id = $users[$i]['id'];
        $newObject->user = $users[$i]['user'];
        $obj->users[] = $newObject;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2013-04-29
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多