我有一个 index.php 和一个 Regions.php 这是一个类。我正在尝试从Regions类调用一个方法到我的 index.php ,但似乎我无法访问它。它说:
Call to undefined function getRegionInfo() in C:\xampp\htdocs\exercise4\index.php on line 7
但我已经包含了我需要的文件。这是代码。
index.php
$regions = new Regions;
$regions = getRegionInfo();
$regions = get_regions();
这是我的Region类
class Regions
{
public function getRegionInfo()
{
$this->get_regions();
}
private function get_regions()
{
global $db;
$result = array();
$sql = "SELECT RegionID, RegionName, IslandID FROM ref_regions";
$stmt = $db->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch())
{
array_push($result,array($row['RegionID'], $row['RegionName'], $row['IslandID']));
}
return $result;
}
}
答案 0 :(得分:3)
首先,正确的index.php看起来像这样:
$regionObj = new Regions();
$regions = $regionObj->getRegionInfo();
您需要表明您在getRegionInfo
对象的特定实例(上例中的Regions
)上调用$regionsObj
函数。
其次,在这种情况下创建公共方法和私有方法没有意义。包含额外的私有方法是不必要的,因为所有公共方法都是调用私有方法。只需将所有代码放在公共方法中即可。你可能只有:
class Regions
{
public function getRegionInfo()
{
global $db;
$result = array();
$sql = "SELECT RegionID, RegionName, IslandID FROM ref_regions";
$stmt = $db->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch())
{
array_push($result,array($row['RegionID'], $row['RegionName'], $row['IslandID']));
}
return $result;
}
}
第三,你不应该让$db
成为全局变量。而是将其作为参数发送到Regions
类的构造函数:
class Regions
{
private $database;
public function __construct(PDO $database) {
$this->database = $database;
}
public function getRegionInfo()
{
$result = array();
$sql = "SELECT RegionID, RegionName, IslandID FROM ref_regions";
$stmt = $this->database->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch())
{
array_push($result,array($row['RegionID'], $row['RegionName'], $row['IslandID']));
}
return $result;
}
}
然后像这样创建Regions对象:
$regionsObj = new Regions($db);
第四,您不需要自己填充结果数组。相反,您只需在fetchAll
对象上返回$stmt
函数的结果:
public function getRegionInfo()
{
$sql = "SELECT RegionID, RegionName, IslandID FROM ref_regions";
$stmt = $this->database->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt->fetchAll();
}
您的最后一堂课,包含所有更改,将如下所示:
class Regions
{
private $database;
public function __construct(PDO $database) {
$this->database = $database;
}
public function getRegionInfo()
{
$sql = "SELECT RegionID, RegionName, IslandID FROM ref_regions";
$stmt = $this->database->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt->fetchAll();
}
}
最后一点,我不确定你是否只是没有包含这部分代码,而且在另一个答案中提到了这一点,我将在此处包含它只是为了完整,请确保包括你的{在引用Regions.php
类之前{1}}中的{1}}文件:
index.php
答案 1 :(得分:0)
使用->
符号访问类方法。所以使用:
$regions = new Regions();
$regions->getRegionInfo();
$regions->get_regions();
如果您想在外部调用,请将get_regions()
从私人更改为公开。
答案 2 :(得分:0)
这个怎么样..你需要先包含文件才能使用它
的index.php
include_once("Regions.php");
$regions = new Regions;
$x = $regions->getRegionInfo(); //this is temp var name