我想扫描目录和子目录,制作xml文件列表,从xml文件中获取内容并显示它。此功能无需OOP即可正常工作。我尝试创建一个类。我从函数scandir_through
调用函数main
。我没有错误,结果也是如此。
class data {
var $dir = 'D:\wamp4\www\begin';
public function scandir_through($dir)
{
$items = glob($dir . '/*');
for ($i = 0; $i < count($items); $i++) {
if (is_dir($items[$i])) {
$add = glob($items[$i] . '/*');
$items = array_merge($items, $add);
}
}
return $items;
}
public function main()
{
$scan_tree = $this->scandir_through($dir);
echo "<ul id='booklist'>"."</n>";
foreach ($scan_tree as $key=>$file){
$url = $file;
$xml = simplexml_load_file($url);
$book_count = count($xml->book);
for($i = 0; $i < $book_count; $i++) {
$book = $xml->book[$i];
$title=$xml->book[$i]->title;
$author=$xml->book[$i]->author;
//echo '</br>';
//echo $file. "   ";
//echo $title. "   ";
//echo $author;
echo "<li><div class='file'>".$file."</div>
<div class='title'>".$title."</div>
<div class='author'>".$author."</div></li></n>";
}
}
echo "</ul>";
}
}
$d = new data();
$d->main();
?>
答案 0 :(得分:14)
问题是因为$dir
实例变量不是您在main方法中访问的内容。 (它在该方法的范围内寻找$dir
变量,而不是在类级别。)
您需要使用的是......
$scan_tree = $this->scandir_through($this->dir);
如果您打开E_NOTICE警告,您会发现它会抛出错误。
答案 1 :(得分:3)
我认为$ dir应该是主要的论据。试想一下,如果你在课堂上没有别的东西,主要从哪里得到$ dir?
我会改变:
public function main()
到
public function main($dir)
当你使用$ d调用main时,请包含dir,然后将其更改为:
$d->main($dir);
答案 2 :(得分:1)
$items=data::scandir_through($dir);