我以前主要用PHP编写脚本,现在考虑对它“更严肃”:)
我正在一个徒步旅行网站上工作,我需要将一些值放入一个对象中,然后我尝试将其传递回调用代码。
我试过这样做:
$trailhead = new Object ();
但这种系统对我不利。
然后我根本没有声明对象,并开始像这样使用它:
$trailhead->trailhead_name = $row['trailhead_name'];
$trailhead->park_id = $row['park_id'];
这似乎合理地工作了。但至少有3个问题:
由于在从数据库获取内容时执行该代码,如果有多行,我该怎么办?
当我将$ trailhead传递回调用代码时,变量为空
我实际上可能更喜欢为Trailhead制作一个真实的对象:
class Trailhead
{
private $trailhead_name;
private $park_id;
private $trailhead_id;
public function __construct()
{
$this->trailhead_name = NULL;
$this->park_id = NULL;
$this->trailhead_id = NULL;
}
}
在这些情况下,人们通常会做些什么?我的方法在哪里出错?我知道它不止一个地方:)
答案 0 :(得分:4)
$trailheads[] = $trailhead;
print_r()
$trailhead
来检查它是否符合您的预期。 PHP中的默认对象类型为stdClass
。Trailhead
个对象具有功能。你目前正在这样做的方式基本上没有利用PHP的任何对象功能 - 它本质上是一个语法略有不同的数组。答案 1 :(得分:3)
我认为你应该首先与某些基础知识“联系”。 PHP中的对象有一段历史。它们是数组的相对对象,有两种对象:
数据对象被称为stdClass
,这实际上是您最初寻找的内容:
$trailhead = new Object();
PHP中的写成:
$trailhead = new stdClass;
(末尾有或不带括号,两者都有效)
然后,您可以动态地向其添加成员,就像您在第二部分中所做的那样,而不是声明变量(在PHP中也是如此):
$trailhead->trailhead_name = $row['trailhead_name'];
$trailhead->park_id = $row['park_id'];
如果您想更快地将$ row转换为对象,只需cast:
$trailhead = (object) $row;
这也是另一种方式:
$array = (array) $trailhead;
如您所见,PHP中基于数据的基础对象不会隐藏它们与数组数据类型的关系。事实上,你甚至可以对它们进行迭代:
foreach($trailhead as $key=>$value) {
echo $key, ' is ', $value, "<br>\n";
}
你可以在PHP手册中找到很多关于这方面的信息,它有点散布,但是在重复大量名称之前,值得了解一些基础知识,只是为了传递属于一起的数据。
在这些或多或少的愚蠢数据对象旁边,您可以编写完整的类 - 在每个stdClass可以执行的操作旁边 - 可以拥有代码,可见性,继承以及所有可以构建好东西的东西 - 但这可以是pretty complex as the topic is larger
所以它总是取决于你需要什么。但是,这两种类型的对象都是“真实对象”,两者都应该有效。
class myClass {
function importArray(array $array) {
foreach($array as $key=>$value) {
if(!is_numeric($key)) $this->$key=$value;
}
}
function listMembers() {
foreach($this as $key=>$value) {
echo $key, ' is ', $value, "<br>\n";
}
}
}
$trailhead = new myClass();
$trailhead->importArray($row);
echo $trailhead->park_id;
请记住,除了创建一组仅在每个对象(存储数据)中执行相同操作的对象之外,您应该只使用一个灵活处理作业的灵活类(例如stdClass),因为这将保留您的代码更清洁。
您可以花时间考虑如何使数据库层更加模块化等,而不是编写getter / setter狂欢。
答案 2 :(得分:1)
回传一个数组:
$trailhead = array(
'trailhead_name' => $row['trailhead_name'],
'park_id' => $row['park_id'],
'trailhead_id' => $row['trailhead_id'],
)
然后访问它:
$trailhead['park_id'];
或使用漂亮的list()
将其读入变量:
list($trailhead_name, $park_id, $trailhead_id) = $trailhead;