当我使用下面的代码时,即使函数看起来很好,也会抛出错误。 (仅供参考我也尝试过有效和静态的前缀。)
函数调用:
foreach ($this->errorList as $field => $error_msg) {
// check for valid input and store cleaned vars
$this->goodInput[$field] = Valid::__($field);
}
结果:
PHP致命错误:调用未定义的函数Valid :: email()
代码:
class Valid
{
public static function __($name)
{
// this is what I tried:
// $checkFunction = 'self::' . $name;
// return $checkFunction();
// this works:
// Thank you to fusion3k and Darren
return self::$name();
}
private static function email()
{
//sanitize and validate email field
}
// other methods for other fields
// ...
// default method to sanitize input for display in email
public static function __callStatic($name, $arguments)
{
if (array_key_exists($name, $_POST)) {
$clean_var = trim($_POST[$name]);
$clean_var = stripslashes($clean_var);
$clean_var = htmlspecialchars($clean_var);
return $clean_var;
} else {
return '';
}
}
}
答案 0 :(得分:3)
我假设您首先在某处正确地实例化您的课程吗?那么最好检查所述方法是否存在,并利用self::
。另外,as @fusion3k said,最好还是self::$name()
。以下是您应该做的事情的一个例子:
public static function __($name) {
if(method_exists(new self, $name)) {
return self::$name();
}
}
老实说,这不是你做这件事的最佳方式。您应该考虑call_func_user_array()
来正确管理这种实现。允许将参数解析为被调用的方法。
答案 1 :(得分:0)
调用静态函数时没有创建任何对象,则无法访问有效函数。试试这个
public static function __($name) {
$valid = new Valid ();
return $valid::$name();
}