__toString () не должно вызывать исключение

когда я иду в браузер в 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,
Я использую композитор для обработки автозагрузки, и это исходный контент:

index.php

<?php

require_once './vendor/autoload.php';$files = new MyDirectoryIterator('../');
echo $files;

MyDirectoryIterator.inc.php

<?phpclass 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, код ведет себя как ожидалось.
так почему я получаю эту ошибку, когда я выполняю echo $files из моего index.php?

есть идеи.

2

Решение

Вот как я могу решить эту проблему, если у кого-то возникла такая же проблема:

исключение произошло из-за отказа в доступе к некоторым файлам в листинге, поэтому я просто добавил блок try catch внутри метода __toString.

function __toString()
{
$output = '';
try {
foreach($this->_rfiles as $file)
{
$output .= $file . '<br />';
}
}
catch(Exception $e) {}
return $output;
}

странная вещь, которую я заметил, почему это исключение не выдается, когда я удаляю __toString () из класса и добавляю его логику в конструктор? все файлы перечислены без исключения?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]