当我在index.php上访问浏览器时,出现以下错误
Fatal error: Method MyDirectoryIterator::__toString() must not throw an exception in /home/oussama/Desktop/CoursesTraining/OOPInPHP/index.php on line 0
当我尝试捕获异常时,我得到了同样的错误,所以我该怎么想 要知道异常是什么?
我的主目录包含两个文件index.php和MyDirectoryIterator.inc.php, 我使用composer来处理自动加载,这是源内容:
的index.php
<?php
require_once './vendor/autoload.php';
$files = new MyDirectoryIterator('../');
echo $files;
MyDirectoryIterator.inc.php
<?php
class MyDirectoryIterator {
protected $_path;
protected $_files;
protected $_rfiles;
function __construct($path)
{
$this->_path = __DIR__ . '/' . $path;
$this->_files = new RecursiveDirectoryIterator($path);
$this->_files->setFlags(
FileSystemIterator::UNIX_PATHS |
FileSystemIterator::SKIP_DOTS
);
$this->_rfiles = new RecursiveIteratorIterator($this->_files);
}
function __toString()
{
$output = '';
foreach($this->_rfiles as $file)
{
$output .= $file . '<br />';
}
return $output;
}
}
当我将__toString的内容复制到__construct时,代码按预期运行。
那么,当我从index.php执行echo $files
时,为什么会出现错误?
任何想法。
答案 0 :(得分:0)
这是我如何解决它,以防有人有同样的问题:
异常是由于权限被拒绝,访问列表中的一些文件,所以我只是在__toString方法中添加一个try catch块。
function __toString()
{
$output = '';
try {
foreach($this->_rfiles as $file)
{
$output .= $file . '<br />';
}
}
catch(Exception $e) {}
return $output;
}
奇怪的是我已经注意到了,当我从类中删除__toString()并将其逻辑添加到构造函数中时,为什么没有抛出异常?列出了所有文件,没有例外吗?