我在WordPress中做了很多工作,我注意到有更多的函数返回对象而不是数组.除非您特别要求数组,否则数据库结果将作为对象返回.错误作为对象返回.在WordPress之外,大多数API都会为您提供一个对象而不是一个数组.
我的问题是,为什么他们使用对象而不是数组?在大多数情况下,它并不重要,但在某些情况下,我发现物体不仅难以加工而且能够缠绕我的头部.是否有使用对象的性能原因?
我是一名自学成才的PHP程序员.我有文科学位.如果我错过了计算机科学的一个基本方面,请原谅我.;)
(这个问题使用PHP作为上下文,但不仅限于PHP.例如,任何内置哈希的语言也是相关的)
我们来看看这个例子(PHP):
function makeAFredUsingAssoc()
{
return array(
'id'=>1337,
'height'=>137,
'name'=>"Green Fred");
}
Run Code Online (Sandbox Code Playgroud)
与:
class Fred
{
public $id;
public $height;
public $name;
public function __construct($id, $height, $name)
{
$this->id = $id;
$this->height = $height;
$this->name = $name;
}
}
function makeAFredUsingValueObject()
{
return new Fred(1337, 137, "Green Fred");
}
Run Code Online (Sandbox Code Playgroud)
方法#1当然更简洁,但它可能很容易导致错误,例如
$myFred = makeAFredUsingAssoc();
return $myFred['naem']; // notice teh typo here
Run Code Online (Sandbox Code Playgroud)
当然,有人可能会争辩说$myFred->naem同样会导致错误,这是事实.然而,正式课程对我来说感觉更加僵硬,但我无法证明这一点.
使用每种方法的优点/缺点是什么?人们何时应该使用哪种方法?
使用两种结构中的一种比另一种结构有什么好处?
// array
$user['name'] = 'Emanuil';
// object
$user->name = 'Emanuil';
Run Code Online (Sandbox Code Playgroud) A PHP Error was encountered
Severity: Warning
Message: Creating default object from empty value
Filename: models/Modeltest.php
Line Number: 13
Run Code Online (Sandbox Code Playgroud)
我试图在模型中创建一个数组并将其返回给控制器,但它是否给出了这个警告?任何人都可以帮我解决问题吗?
我的ModelClass代码
$list = Array();
$list[0]->title = "first blog title";
$list[0]->author = "author 1";
$list[1]->title = "second blog title";
$list[1]->author = "author 2";
return $list;
Run Code Online (Sandbox Code Playgroud)
我的控制器类代码
$this->load->model("modeltest");
print_r($this->modeltest->get_articles_list());
Run Code Online (Sandbox Code Playgroud) 致命错误:未捕获错误:无法使用 stdClass 类型的对象作为数组
$code = json_decode($src);
echo $code["items"];
Run Code Online (Sandbox Code Playgroud)
var_dump 显示以下内容(截断):
object(stdClass)#7 (3) { ... }
Run Code Online (Sandbox Code Playgroud)
我不知道它是什么stdClass以及如何使用它。
编辑:
stdClass是一个创建简单对象实例的类。类的属性将使用->而不是[...]符号来访问。
根据 的文档json_decode,简单地将第二个参数设置为true将导致结果是关联数组,它可以像数组一样依次访问。
在发布这个问题时,我没有尝试搜索如何解码 JSON - 因为这非常简单而且我已经开始工作了。我刚刚收到另一个错误(上图),并且没有找到如何解决这个问题的运气。我相信人们也有类似的问题,因为这个问题也得到了一些看法。