【发布时间】:2016-03-01 08:11:26
【问题描述】:
我编写了一个类,它在构造中访问数据库并获取名称列表。这些名称进入关联数组,例如('名称' => 'id')。
即重点是传入名字来取回一个ID:
$id = names::nameToId('some name');
print $id;
// prints int
问题是当我尝试从构造返回数组时出现错误:
注意:未定义变量:nameArray in (etc)
这是目前为止的代码:
class nameToId {
public $nameArray;
private $mysqli;
public function __construct($mysqli) {
...
while($row = mysqli_fetch_assoc($res)) {
$nameArray[$row['name']] = $row['id'];
}
return $nameArray;
}
static public function nameToId($name) {
$nameId = $nameArray[$name];
return $nameId;
}
}
$namesToId = new nameToId($mysqli);
$nameId = $namesToId::nameToId('some name');
echo $nameId;
为什么 $nameArray 不被传递给 nameToId()?我是新来的类,我想通过在我第一次创建类时将 $nameArray 声明为 public 来使它可用。我也尝试过让它全球化,尽管我知道这不是好的形式,但它仍然没有用。
【问题讨论】:
-
因为使用
new调用类构造函数总是返回类的实例,与任何代码无关在使用return语句的构造函数中,因此您的返回值被忽略 - PHP Docs -
你不应该返回数组,而是将它分配给 $this -> nameArray;
-
如果要使用静态函数,则需要使用静态属性。看,你没有设置你班级的
$nameArray;。将return $nameArray更改为$this->nameArray=$nameArray; -
我已经尝试在构造中设置
$this->nameArray = $nameArray,但最终出现“致命错误:未捕获的错误:不在对象上下文中使用 $this” -
在不给出理由的情况下投反对票并没有多大作用。