我有一个FileLocations
课程,用于存储特定文件的路径。
class FileLocations
{
/**
* @var array
*/
private $files = [];
/**
* @param array $files
*
* @throws \Exception
*/
public function __construct (array $files) {
if (!$this->areValidFiles($files)) {
throw new Exception;
}
$this->files = $files;
}
/**
* @param $files
*
* @return bool
*/
private function areValidFiles (array $files) {
foreach ($files as $file) {
return is_file($file);
}
return false;
}
/**
* @return array
*/
public function getFiles () {
return $this->files;
}
}
我想验证每个文件(使用is_file
),因此我创建了areValidFiles
函数并循环遍历它获得的每个数组索引。在每个数组项目上,它都会进行检查。
当我像这样运行这段代码时:
$fileLocations = new FileLocations(['doesExist.js', 'doesnotExist.js']);
var_dump($fileLocations->getFiles());
它只对第一个文件进行验证,并且甚至不会重新确认参数中是否传递了第二个文件。
它也不会抛出异常。
问题
这是如何实现的,它只会在验证中重新整理一个文件 并且不会在第二个文件上引发异常 存在?
如何制作它以便我能够传递更多参数
在areValidFiles
函数内?
答案 0 :(得分:1)
您的areValidFiles
函数应该被重写:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if (!is_file($file))
return false;
}
return true;
}
答案 1 :(得分:1)
我会做类似的事情:
/**
* @param $files
*
* @return bool
*/
private function areValidFiles (array $files) {
$files = array();
foreach ($files as $file) {
$files[$file] = is_file($file);
}
return $files;
}
$fileLocations = new FileLocations(['doesExist.js', 'doesnotExist.js']);
$fileLocations['doesExist.js'] //true
$fileLocations['doesnotExist.js'] //false
或使用例外:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if(!is_file($file)){
throw new Exception('Invalid file: '.$file);
}
}
}
try{
$fileLocations = new FileLocations(['doesExist.js', 'doesnotExist.js']);
} catch (Exception $e)
{
//do something
}
答案 2 :(得分:1)
在您的功能中添加观察程序,而不是在return
is_file
private function areValidFiles (array $files) {
$are_all_files_valid = true;
foreach ($files as $file) {
if (!is_file($file)) {
$are_all_files_valid = false;
break;
}
}
return $are_all_files_valid;
}