6

我想扫描目录和子目录,列出 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. " &nbsp   ";
                   //echo $title. " &nbsp   ";
                   //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();
?>
4

3 回答 3

20

问题是因为$dir实例变量不是您在 main 方法中访问的。(它在该方法的范围内寻找一个$dir变量,而不是在类级别。)

你需要使用的是...

$scan_tree = $this->scandir_through($this->dir);

如果您打开 E_NOTICE 警告,您会看到它一直在抛出错误。

于 2013-08-08T18:01:18.457 回答
3

我认为 $dir 应该是 main 的一个参数。试想一下,如果你在课堂上什么都没有,那么 main 会从哪里获得 $dir 呢?

我会改变:

public function main()

public function main($dir)

并且当您使用 $d 调用 main 时,请包含该目录,以便将其更改为:

$d->main($dir);
于 2013-08-08T18:16:15.333 回答
1
$items=data::scandir_through($dir);
于 2015-05-06T16:28:37.893 回答