如何定义一个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);
我希望澄清。
答案 0 :(得分:1)
看这里http://php.net/manual/en/migration56.new-features.php:
function f($req, $opt = null, int ...$params) {
printf('$req: %s; $opt: %s; number of params: %s'."\n",
$req, $opt, count($params));
}
此功能以$reg
和$opt
作为参数,数组$params
包含所有下一个参数并将其转换为int
所以f(1,2,3,4)
有$reg=1 $opt=2, $params=[3,4]
。
或f(1,2,3,4,'5')
有$reg=1 $opt=2, $params=[3,4,5]
。
知道您可以查看$params
并仅使用有效参数[ENUMS]。
要定义ENUMS,您可以这样做:
interface MyEnums {
const VALUE1 = 1;
const VALUE2 = 2;
}
echo MyEnums::VALUE1;
因此,如果你将这两种技术结合起来,你就会有一些类似于你的例子。
f(1,2,MyEnums::VALUE1,MyEnums::VALUE2);
请记住@ this.lau_上面的评论。
答案 1 :(得分:1)
我认为您正在寻找的是define()函数 - 您可以使用它来创建filter_var
函数使用的常量。
在您的示例中,您将创建以下常量:
define('TYPE_FILE', 1);
define('TYPE_DIR', 2);
define('TYPE_SOMETHING_ELSE', 3);
然后您可以使用它,例如f("BAR", "bar", TYPE_DIR);
。
或者,如果您想避免全局常量,可以使用类来限定它们:
class FileSystemType {
const FILE = 1;
const DIR = 2;
const SOMETHING_ELSE = 3;
}
然后您可以使用以下方式访问:
f("BAR", "bar", FileSytemType::DIR);