我最近开始使用OO PHP,但我遇到了错误。
我有一个基类BaseController.php
以及扩展DatabaseController.php
BaseController.php
目前这些类非常基本,但我想在Base中使用一些可重复使用的函数,总体而言这已成功。
但是,我试图在基本控制器中一起使用函数,似乎$this->functionName();
的函数不会返回任何内容。
这是我的代码,以进一步解释:
基本控制器
public function connectDB() {
$conn = mysqli_connect("localhost", "root", "", "db_name");
return $conn;
}
public function getSource($id) {
$conn = $this->connectDB();
$sql = "SELECT * FROM sources WHERE id = '$id'";
$query = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($query)) {
$name = $row['slug'];
}
return $name;
}
public function mapColumnsToFunctions($row) {
foreach($row as $key => $value) {
if($key == "source") {
$result = $this->getSource($value);
$row["source_slug"] = $result;
}
return $row;
}
}
数据库控制器
class DatabaseController extends BaseController {
public function getDataItem($type, $id) {
$conn = $this->connectDB();
$id = $this->checkField($id, "");
$sql = "SELECT * FROM $type WHERE id = '$id'";
$query = mysqli_query($conn, $sql);
$response = array();
while($row = mysqli_fetch_assoc($query)) {
$response[$type][] = $this->mapColumnsToFunctions($row);
}
$response = json_encode($response);
return $response;
}
}
我应该看到source_slug
作为字段的JSON响应,但这不会传到Feed中。
{
"id": "213023",
"name": "Source Name",
"url": "http://sample.url",
"source": "1"
// NO source_slug: "english equiv of 1"
},
答案 0 :(得分:0)
mapColumnsToFunctions
在return
循环中有一个foreach
语句。因此,即使它没有在$row
中更新任何内容,它也会在第一次迭代中立即返回。
return
语句应该在循环之后。
public function mapColumnsToFunctions($row) {
foreach($row as $key => $value) {
if($key == "source") {
$result = $this->getSource($value);
$row["source_slug"] = $result;
}
}
return $row;
}
循环似乎是不必要的(除非它是你正在做的事情的缩写)。它可以改写为:
public function mapColumnsToFunctions($row) {
if (isset($row["source"])) {
$row["slug_source"] = $this->getSource($row["source"]);
}
return $row;
}