Php 动态类型和API“;断路器;
我知道这个标题似乎很神秘,也许是的。这几乎是一个进退两难的局面。我正在开发一个用于研究目的的框架(可能是专业的),然后我打算联合开发一个文档,解释项目中的所有属性和方法 文档应该说明Php 动态类型和API“;断路器;,php,dynamic-typing,Php,Dynamic Typing,我知道这个标题似乎很神秘,也许是的。这几乎是一个进退两难的局面。我正在开发一个用于研究目的的框架(可能是专业的),然后我打算联合开发一个文档,解释项目中的所有属性和方法 文档应该说明sum()方法必须采用两个整数参数。例如: /** * Sum two numbers. * @param int $a * @param int $b * @return int */ function sum($a, $b) { return $a + $b; } function sum($
sum()
方法必须采用两个整数参数。例如:
/**
* Sum two numbers.
* @param int $a
* @param int $b
* @return int
*/
function sum($a, $b) {
return $a + $b;
}
function sum($a, $b) {
throwErrorIfNotMatchType($a, "int");
throwErrorIfNotMatchType($b, "string");
return $a + $b;
}
但问题是,如果用户John Doe决定发送错误类型的信息(不管为什么,可能是因为他们没有阅读文档),我应该如何处理错误?我应该让PHP得到这份工作(在某些情况下,它可以恰巧完美地运行代码),还是手动检查并抛出我自己的错误,这样就不会出现这种巧合?例如:
/**
* Sum two numbers.
* @param int $a
* @param int $b
* @return int
*/
function sum($a, $b) {
return $a + $b;
}
function sum($a, $b) {
throwErrorIfNotMatchType($a, "int");
throwErrorIfNotMatchType($b, "string");
return $a + $b;
}
简言之,控制错误和巧合的责任必须完全由API管理,或者完全由用户负责(用户应该已经阅读了现有文档),或者应该部分控制?对于最后一个答案,在什么情况下?类型检查需要CPU—这是事实。所以你需要选择你的毒药
- 要么速度较慢,但类型更安全
- 或者更快,但类型安全性更低
/**
* Sum two numbers, without checking types.
* @param int $a
* @param int $b
* @return int
*/
function sum($a, $b) {
return $a + $b;
}
/**
* Sum two numbers, throw if checking types fails
* @param int $a
* @param int $b
* @return int
*/
function ts_sum($a, $b) {
throwErrorIfNotMatchType($a, "int");
throwErrorIfNotMatchType($b, "int");
return sum($a, $b);
}
现在最聪明的部分是,可以从第一个版本加上文档注释自动生成第二个版本。或者可以使用
DEBUG
常量来运行类型检查。检查DEBUG常量需要CPU时间-目标是在快速路径中尽可能快。随着应用程序的成熟,您通常可以停用typesafe API,并在生产中使用非typesafe API运行。