我正在学习php,我正在测试oop和类。
我的代码是:
<?php
require('user.php');
$user = new User($username);
$projects = $user->getProjects();
for ($n = 0; $n<count($projects); $n++) {
echo "<li>";
echo "<a id=\"menu_pages\" href=\"\"><img src=\"../images/types/project.png\"/>" . $projects[$n]->name . "</a>";
echo "<ul>";
$items = $user->getItems($n);
for ($i = 0; $i<count($items); $i++) {
echo "<li><a href=\"../\"><img src=\"../images/types/" . $items[$i]->type . ".png\"/>" . $items[$i]->name . "</a></li>";
}
echo "</ul>";
echo "</li>";
}
?>
我收到错误: 致命错误:无法在第2行的/home/ios/public_html/classes/item.php中重新声明类别
我发现它是因为我正在使用
$items = $user->getItems($n);
循环。因为如果我将其改为
$items = $user->getItems(1);
它有效。无论如何我都无法弄清楚错误。
请帮助:)
提前致谢。
方法:
function getItems($parent,$type = NULL) {
$items = array();
$username = $this->uname;
$userid = $this->getId($username);
include('classes/config.php');
if ($type != NULL) {
}
require_once('classes/item.php');
foreach ($pdo->query($sql) as $row) {
$instance = new Item();
$instance->name = $row['name'];
$instance->id = $row['id'];
$instance->type = $row['type'];
$instance->parent_id = $row['parent_id'];
$items[] = $instance;
unset($instance);
}
function getProjects() {
$projects = array();
$username = $this->uname;
$userid = $this->getId($username);
include('classes/config.php');
require_once('classes/project.php');
foreach ($pdo->query($sql) as $row) {
$proj = new Project();
$proj->name = $row['name'];
$proj->id = $row['id'];
$projects[] = $proj;
unset($proj);
}
return $projects;
}
编辑:
它还没有改变它。代码经历没有错误,但现在第一个应该在第二个下面,第一个是空白。看到我逻辑中的任何问题?
答案 0 :(得分:2)
使用require_once
同时包含具有类定义的文件(我想这将在getItems()
中的某个位置)或组织您的文件并定义魔术函数__autoload(),它将在您使用时加载它
在查看提供的来源后,我怀疑这是否适用于多行......
在这里你甚至在检查是否有任何项目之前创建了Item
的实例,并且在第一个循环$instance
被销毁之后:
require('classes/item.php');
$instance = new Item();
foreach ($pdo->query($sql) as $row) {
$instance->name = $row['name'];
$instance->id = $row['id'];
$instance->type = $row['type'];
$instance->parent_id = $row['parent_id'];
$items[] = $instance;
unset($instance);
}
这应该是:
require_once('classes/item.php');
foreach ($pdo->query($sql) as $row) {
$instance = new Item();
$instance->name = $row['name'];
$instance->id = $row['id'];
$instance->type = $row['type'];
$instance->parent_id = $row['parent_id'];
$items[] = $instance;
unset($instance);
}
因此,每个项目都会创建新实例。
答案 1 :(得分:1)
将其更改为require_once('user.php');
,并且不会尝试在每次传递时执行user.php。
答案 2 :(得分:1)
很难说看到getItems()函数中的内容,但它可能包含一个文件,其中Item类在循环中定义,从而触发此错误。请尝试使用require_once()。
答案 3 :(得分:1)
错误消息指向重复的类定义(以Class classname
开头的蓝图)。
如果你指的是正确的代码行 - 我并不相信你是 - 我很确定$user->getItems()
包含一个PHP文件,其中重新定义了类。
可以使用require_once()
或include_once()
修复即时问题,但您应该更改getItems
函数,以便首先将类定义加载到其他位置。
答案 4 :(得分:1)
我猜测getItems()
类上的User
函数可能有类似的行:
require('item.php');
如果您将其更改为:
require_once('item.php');
你应该好好去。
(如果我错了,那么请发布getItems()
函数的代码,以便我们进一步诊断。