我知道按值传递,按引用传递等的概念......所以,我理解为什么显式定义的函数在未定义参数时会发出警告。
但是,如果empty()和isset()是函数,那么为什么在传递未定义的变量时它不会发出警告?这里有一些特殊的魔法吗?我该如何复制它?
答案 0 :(得分:3)
public function validate($data,$errors) {
// Do your data processing here and in case of an
// error add it to the errors array like:
$errors->add( 'validation', __( 'Please input that correctly.' ));
}
add_action('woocommerce_after_checkout_validation', 'validate',10,2);
和empty()
实际上不是函数。
它们是内置于语言中的关键字,由编译器执行,这就是所讨论的行为是可能的 - 编译器(与常规函数执行的运行时引擎不同)已经知道变量是否存在。
作为一个副作用,这就是为什么在PHP 5中你无法定义名为isset()
,empty()
,isset()
等的类方法。你仍然无法声明类,或list()
使用相同名称的常量。
其他一些语言将此作为名为fexpr的功能提供。