【问题标题】:PHP, Can not find function of object in arrayPHP,在数组中找不到对象的函数
【发布时间】:2015-03-15 07:36:33
【问题描述】:

我正在为一位摄影师构建一个网页,该网页包含一堆画廊。

我已将我的页面连接到数据库,我可以从数据库返回我需要的所有内容并将其放置在 Gallery 对象中。

问题出在这里:
该网页应该能够加载所有画廊并为每个画廊创建一个画廊对象。它应该将它放在一个名为画廊的数组中(尽管这部分工作正常)。

接下来,我想通过 getter 从对象中获取数据,但是当我尝试这样做时,出现以下错误:

致命错误:调用未定义的函数 getTitle() C:\xampp\htdocs\index.php 第 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-&gt;getTitle();
  • 感谢您的回复。我编程java半年,搞混了。再次感谢!
  • @BrainFooLong 我不明白为什么人们在 cmets 中发布答案 ;)
  • @Tek 好问题,可能是我自己的错误,或者我有点奇怪。就是这样:)下次写答案时我会记住这一点。

标签: php arrays oop fatal-error


【解决方案1】:

你打错了。 修复你的方法调用

$gallery->getTitle();

【讨论】:

  • 另外,(与您的问题无关)而不是执行第二个循环,为什么不调用 $galleries[$i]->getTitle();在你的 for(...) 循环中?
  • 我这样做是为了测试我是否得到了返回值。稍后在这个项目中,我将在页面加载后立即制作对象,但只需要请求后的数据。然后我必须把事情分开。但是,您是对的,在这种情况下会更有意义
  • 太棒了。那么如果 Tomasz 的回答对您来说一切正常,请接受它。
  • @Marcel 您可以接受对您的帮助最大并解决您的问题的答案,通过选中答案左侧的复选标记,您无需编辑标题
猜你喜欢
  • 2018-12-19
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2018-03-31
相关资源
最近更新 更多