我有4个文件index.php, Database.php, Zoo.php, Animal.php
// Zoo.php
class Zoo {
private $db;
private $animals = array();
public function __constructor(Database $db) {
$this->db = $db;
$this->getAllAnimals();
}
private function getAllAnimals() {
//Database stuff, returns an array with all animals
$p=0;
foreach($dbresult as $an){
$animals[$p++] = new Animal($an['name'], $an['age'], $an['weight']);
}
}
public function listAnimals() {
foreach ($this->animals as $a){
echo $a->name;
//and so on
}
}
}
// Animal.php
class Animal {
// variables for the animals
}
// index.php
<?php
include 'Database.php';
include 'Zoo.php';
$db = new Database();
$zoo = new Zoo($db);
$zoo->listAnimals();
?>
这是我的头脑,所以如果有一些错误,只需将其视为伪代码:)
我的问题:
我得到Fatal Error
Class Animal not found
。
如果我在include 'Animal.php';
的第一行添加Zoo.php
,就在它class Zoo {
之前。
我仍然在用PHP学习OOP,并且include-line让我感到奇怪,所以我请求有人帮我解决这个问题。
是否有另一种方法可以在“Zoo”类中使用“Animal”对象,没有包含或者使用include是否正常,或者可能需要/ require_once?
答案 0 :(得分:1)
我相信现在大多数OOP开发人员都利用__autoload或(甚至更好)SPL autoloader,即使只是在他们使用的库和框架中。
答案 1 :(得分:1)
如果您需要Zoo.php中的“Animal”类,则在Zoo.php顶部需要require_once("Animal.php");
。如果您在其他文件中需要它,请在那里执行相同操作。
答案 2 :(得分:0)
包含线让我觉得奇怪
那是为什么呢?要使用Animal
,您必须包含其定义。对我来说似乎总是很理性。
有require
和require_once
这样的替代方案可以做同样的事情(但有一些额外的限制),以及一些更奇特的替代方案,例如自动加载。但对于简单的任务,include
会很好。