验证数组中的多个项目
Validation of multiple items in an array
我有一个 FileLocations
class 存储特定文件的路径。
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());
它只对第一个文件进行验证,甚至没有确认在参数中传递了第二个文件。
它也不会抛出异常。
问题
怎么会在验证中只reconize一个文件
并且不会在第二个甚至没有的文件上抛出异常
存在吗?
我怎样才能让它能够传递更多的参数
在 areValidFiles
函数中?
您的 areValidFiles
函数应该重写:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if (!is_file($file))
return false;
}
return true;
}
我会做类似的事情:
/**
* @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
}
在 is_file
之后向您的函数添加观察者而不是使用 return
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;
}
我有一个 FileLocations
class 存储特定文件的路径。
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());
它只对第一个文件进行验证,甚至没有确认在参数中传递了第二个文件。
它也不会抛出异常。
问题
怎么会在验证中只reconize一个文件 并且不会在第二个甚至没有的文件上抛出异常 存在吗?
我怎样才能让它能够传递更多的参数 在
areValidFiles
函数中?
您的 areValidFiles
函数应该重写:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if (!is_file($file))
return false;
}
return true;
}
我会做类似的事情:
/**
* @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
}
在 is_file
return
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;
}