【发布时间】:2017-02-03 10:36:54
【问题描述】:
如何定义一个 PHP 函数,其参数接受一组固定值,类似于 filter_var,它接受各种值作为参数,如大写字母:
http://php.net/manual/en/filter.filters.validate.php
我猜它会是这样的:
function f(int $params) { ... }
但问题是如何制作我自己的固定大写类型关联?
举例说明:
目前我有两个功能:
function defineDirConstant($constant, $dirname) {
if (is_dir($dirname) && is_readable($dirname)) {
define(__NAMESPACE__ . '\\' . $constant, $dirname . DIRECTORY_SEPARATOR);
} else {
// some other logic
}
}
function defineFileConstant($constant, $filename) {
if (is_file($filename) && is_readable($filename)) {
define(__NAMESPACE__ . '\\' . $constant, $filename);
} else {
// some other logic
}
}
我愿意合二为一:
function defineFilesystemConstant($constant, $filename, int $type) {
// some logic considering the $type
}
我知道在这种特殊情况下我可以使用布尔值作为类型,但我的问题是一般性的:如何制作一个能够作为文本输入的人类可读参数。例如。函数调用将是
f("ONE", "foo.txt", TYPE_FILE);
f("BAR", "bar", TYPE_DIR);
f("JIM", "jimcarrey", TYPE_SOMETHING_ELSE);
我希望澄清一下。
【问题讨论】:
-
我不认为你真的想要这个,如果事情不完美,会抛出很多运行时错误。
-
如果我理解正确,您想创建一个函数来接受一个(或可能更多)具有恒定值的参数吗?
function f(constant_goes_here, ...){}之类的东西? -
您的意思是您的函数应该接受某些常量(如 MY_FILTER1、MY_FILTER2 等)而不接受其他常量吗?在这种情况下,没有内置的方法可以做到这一点。您必须在函数体中检查输入是否在允许的范围内。
-
请说明您想要什么,例如通过编写模型代码(即使它不是有效的 PHP)。
-
我添加了一个说明。