Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证数组中的多个项_Php_Arrays_Validation - Fatal编程技术网

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)
?不是。只有当它发现一个不存在的文件时,才希望
返回
。您不希望在循环的每次迭代中
返回
。请理解,当您使用
返回
时,您的函数会立即停止工作。这与我所做的不一样吗?除了颠倒真与假?不,不一样。我还能这样做吗<代码>返回!是_