Php 验证数组中的多个项
我有一个Php 验证数组中的多个项,php,arrays,validation,Php,Arrays,Validation,我有一个FileLocations类,它存储特定文件的路径 class FileLocations { /** * @var array */ private $files = []; /** * @param array $files * * @throws \Exception */ public function __construct (array $files) { if (!
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());
它只对第一个文件进行验证,甚至不确认在参数中传递了第二个文件
它也不会抛出异常
问题
- 为什么它在验证中只重新确认一个文件 并且不会在第二个文件上引发异常,该文件甚至 存在
- 如何使其能够传递更多参数
是否在
功能中ArevalidFile
是有效文件
功能应该重写:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if (!is_file($file))
return false;
}
return true;
}
您的
AreValidFile
函数应该重写:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if (!is_file($file))
return false;
}
return true;
}
您的
AreValidFile
函数应该重写:
private function areValidFiles (array $files) {
foreach ($files as $file) {
if (!is_file($file))
return false;
}
return true;
}
您的
AreValidFile
函数应该重写:
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
}
我会这样做:
/**
* @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
}
我会这样做:
/**
* @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
}
我会这样做:
/**
* @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\u文件之后使用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;
}
在函数中添加一个观察者,而不是在is\u文件之后使用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;
}
在函数中添加一个观察者,而不是在is\u文件之后使用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;
}
在函数中添加一个观察者,而不是在is\u文件之后使用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;
}
返回is_file()
会导致foreach在第一次之后中止。删除这是解决此问题的第一步。当它发现一个不存在的文件时会发生什么?@Bjorn它应该在_构造方法中抛出一个异常。删除它意味着什么?尝试在arevaldfiles()中返回一个带布尔值的数组否,它返回true。返回is_file()
基本上退出函数,阻止它在数组的其余部分循环。为什么不直接抛出异常呢?例如:foreach$files as$file:if not is_file($file):抛出新异常
。否则,您可以将抛出新异常
替换为返回false
。返回is_file()
会导致foreach在第一次之后中止。删除这是解决此问题的第一步。当它发现一个不存在的文件时会发生什么?@Bjorn它应该在_构造方法中抛出一个异常。删除它意味着什么?尝试在arevaldfiles()中返回一个带布尔值的数组否,它返回true。返回is_file()
基本上退出函数,阻止它在数组的其余部分循环。为什么不直接抛出异常呢?例如:foreach$files as$file:if not is_file($file):抛出新异常
。否则,您可以将抛出新异常
替换为返回false
。返回is_file()
会导致foreach在第一次之后中止。删除这是解决此问题的第一步。当它发现一个不存在的文件时会发生什么?@Bjorn它应该在_构造方法中抛出一个异常。删除它意味着什么?尝试在arevaldfiles()中返回一个带布尔值的数组否,它返回true。返回is_file()
基本上退出函数,阻止它在数组的其余部分循环。为什么不直接抛出异常呢?例如:foreach$files as$file:if not is_file($file):抛出新异常
。否则,您可以将抛出新异常
替换为返回false
。返回is_file()
会导致foreach在第一次之后中止。删除这是解决此问题的第一步。当它发现一个不存在的文件时会发生什么?@Bjorn它应该在_构造方法中抛出一个异常。删除它意味着什么?尝试在arevaldfiles()中返回一个带布尔值的数组否,它返回true。返回is_file()
基本上退出函数,阻止它在数组的其余部分循环。为什么不直接抛出异常呢?例如:foreach$files as$file:if not is_file($file):抛出新异常
。否则,您可以用return false
替换抛出新异常
。这和我做的不一样吗?除了颠倒真与假?不,不一样。我还能这样做吗<代码>返回!是文件($file)
?不是。只有当它发现一个不存在的文件时,才希望返回
。您不希望在循环的每次迭代中返回
。请理解,当您使用返回
时,您的函数会立即停止工作。这与我所做的不一样吗?除了颠倒真与假?不,不一样。我还能这样做吗<代码>返回!是文件($file)
?不是。只有当它发现一个不存在的文件时,才希望返回
。您不希望在循环的每次迭代中返回
。请理解,当您使用返回
时,您的函数会立即停止工作。这与我所做的不一样吗?除了颠倒真与假?不,不一样。我还能这样做吗<代码>返回!是文件($file)
?不是。只有当它发现一个不存在的文件时,才希望返回
。您不希望在循环的每次迭代中返回
。请理解,当您使用返回
时,您的函数会立即停止工作。这与我所做的不一样吗?除了颠倒真与假?不,不一样。我还能这样做吗<代码>返回!是_