PHP,在数组中找不到对象的函数
PHP, Can not find function of object in array
我正在为摄影师建立一个网页,这个网页包含一堆画廊。
我已将我的页面连接到数据库,我可以 return 从数据库中获取我需要的所有内容并将其放入 Gallery 对象中。
问题出在这里:
该网页应该能够加载所有画廊并为每个画廊创建一个画廊对象。它应该将它放在一个名为 galleries 的数组中(尽管这部分工作正常)。
接下来,我想通过 getter 从对象中获取数据,但是当我尝试这样做时,出现以下错误:
Fatal error: Call to undefined function getTitle() in
C:\xampp\htdocs\index.php on line 21'
我卡在这了,请问有解决办法吗?
顺便说一句,这是我的代码:
index.php
<?php
// REQUIRED FILES
require_once('PHPclasses/database.class.php');
$database = new Database('localhost','root','','localdatabase');
include('PHPclasses/gallery.class.php');
$results = $database->doQuery("SELECT * FROM gallery");
$galleries = array();
for($i = 0; $i < count($results); $i++) {
$galleries[$i] = new Gallery($i+1, $database);
}
foreach($galleries as $gallery) {
$gallery.getTitle();
}
?>
database.class.php
<?php
/*
* This class contains the connection with the database.
*
* The database connection will be made when instantiating a new database object via 'new Database()'.
* This is done by providing the 4 parameters:
* - server host
* - database user
* - database password
* - database name
*
* The database object can be used to input a query via the doQuery method.
* This method needs the SQL query as a String, It will return an 2D array, being filled with result index as first
* and the database-table contents s second.
*/
class Database
{
// Database connection variables
private $serverhost;
private $username;
private $password;
private $database;
// Database connection itself
private $db_link;
// Query results
private $resultsArray;
public function __construct($host, $user, $pass, $db) {
$this->serverhost = $host;
$this->username = $user;
$this->password = $pass;
$this->database = $db;
// Create connection
$this->db_link = new mysqli(
$this->serverhost,
$this->username,
$this->password,
$this->database
);
// Check for errors in connection
if ($this->db_link->connect_error) {
die("Connection failed: " . $this->db_link->connect_error);
}
}
public function doQuery($query){
$q = $this->db_link->query($query)
or die("Error: ".mysqli_error($this->db_link));
$i = 0;
$resultsArray = array();
while($row = mysqli_fetch_array( $q )) {
$resultsArray[$i] = $row;
$i++;
}
return $resultsArray;
}
}
?>
最后但同样重要的是 gallery.class.php
<?php
/*
* This class contains the Gallery
*
* The gallery object is one instance of the complete gallery.
* The ID given in the constructor is the ID within the database,
*
* This row in the database contains all the properties for each object of gallery
*
* All properties set in the constructor can later be obtained via the getters.
*/
class Gallery
{
// location of the gallery folder
private $root;
// descriptive variables
private $title;
private $description;
private $thumb;
private $genre;
private $day;
/**
* Constructor if this class
*
* Takes in an identifier which should be the ID of the gallery in the database
* and an database object, which should be the database which stores all the data
*/
public function __construct($galleryIdentifier, $database) {
$result = $database->doQuery("SELECT * FROM `gallery` WHERE `galleryID` = '{$galleryIdentifier}'");
$this->root = $result[0]["galleryRoot"];
$this->title = $result[0]["title"];
$this->description = $result[0]["description"];
$this->thumb = $result[0]["galleryThumb"];
$this->genre = $result[0]["genre"];
$this->day = $result[0]["galleryRoot"];
}
// list of getters (start)
public function getRoot() {
return $this->root;
}
public function getTitle() {
return $this->title;
}
public function getDescription() {
return $this->description;
}
public function getThumb() {
return $this->thumb;
}
public function getGenre() {
return $this->genre;
}
public function getDate() {
return $this->day;
}
// list of getters (end)
}
?>
你打错了。
修复对
的方法调用
$gallery->getTitle();
我正在为摄影师建立一个网页,这个网页包含一堆画廊。
我已将我的页面连接到数据库,我可以 return 从数据库中获取我需要的所有内容并将其放入 Gallery 对象中。
问题出在这里:
该网页应该能够加载所有画廊并为每个画廊创建一个画廊对象。它应该将它放在一个名为 galleries 的数组中(尽管这部分工作正常)。
接下来,我想通过 getter 从对象中获取数据,但是当我尝试这样做时,出现以下错误:
Fatal error: Call to undefined function getTitle() in C:\xampp\htdocs\index.php on line 21'
我卡在这了,请问有解决办法吗?
顺便说一句,这是我的代码:
index.php
<?php
// REQUIRED FILES
require_once('PHPclasses/database.class.php');
$database = new Database('localhost','root','','localdatabase');
include('PHPclasses/gallery.class.php');
$results = $database->doQuery("SELECT * FROM gallery");
$galleries = array();
for($i = 0; $i < count($results); $i++) {
$galleries[$i] = new Gallery($i+1, $database);
}
foreach($galleries as $gallery) {
$gallery.getTitle();
}
?>
database.class.php
<?php
/*
* This class contains the connection with the database.
*
* The database connection will be made when instantiating a new database object via 'new Database()'.
* This is done by providing the 4 parameters:
* - server host
* - database user
* - database password
* - database name
*
* The database object can be used to input a query via the doQuery method.
* This method needs the SQL query as a String, It will return an 2D array, being filled with result index as first
* and the database-table contents s second.
*/
class Database
{
// Database connection variables
private $serverhost;
private $username;
private $password;
private $database;
// Database connection itself
private $db_link;
// Query results
private $resultsArray;
public function __construct($host, $user, $pass, $db) {
$this->serverhost = $host;
$this->username = $user;
$this->password = $pass;
$this->database = $db;
// Create connection
$this->db_link = new mysqli(
$this->serverhost,
$this->username,
$this->password,
$this->database
);
// Check for errors in connection
if ($this->db_link->connect_error) {
die("Connection failed: " . $this->db_link->connect_error);
}
}
public function doQuery($query){
$q = $this->db_link->query($query)
or die("Error: ".mysqli_error($this->db_link));
$i = 0;
$resultsArray = array();
while($row = mysqli_fetch_array( $q )) {
$resultsArray[$i] = $row;
$i++;
}
return $resultsArray;
}
}
?>
最后但同样重要的是 gallery.class.php
<?php
/*
* This class contains the Gallery
*
* The gallery object is one instance of the complete gallery.
* The ID given in the constructor is the ID within the database,
*
* This row in the database contains all the properties for each object of gallery
*
* All properties set in the constructor can later be obtained via the getters.
*/
class Gallery
{
// location of the gallery folder
private $root;
// descriptive variables
private $title;
private $description;
private $thumb;
private $genre;
private $day;
/**
* Constructor if this class
*
* Takes in an identifier which should be the ID of the gallery in the database
* and an database object, which should be the database which stores all the data
*/
public function __construct($galleryIdentifier, $database) {
$result = $database->doQuery("SELECT * FROM `gallery` WHERE `galleryID` = '{$galleryIdentifier}'");
$this->root = $result[0]["galleryRoot"];
$this->title = $result[0]["title"];
$this->description = $result[0]["description"];
$this->thumb = $result[0]["galleryThumb"];
$this->genre = $result[0]["genre"];
$this->day = $result[0]["galleryRoot"];
}
// list of getters (start)
public function getRoot() {
return $this->root;
}
public function getTitle() {
return $this->title;
}
public function getDescription() {
return $this->description;
}
public function getThumb() {
return $this->thumb;
}
public function getGenre() {
return $this->genre;
}
public function getDate() {
return $this->day;
}
// list of getters (end)
}
?>
你打错了。 修复对
的方法调用$gallery->getTitle();