如何在PHP中通过变量调用静态函数?

时间:2016-03-15 02:49:43

标签: php

当我使用下面的代码时,即使函数看起来很好,也会抛出错误。 (仅供参考我也尝试过有效和静态的前缀。)

函数调用:

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 '';
        }
    }
}

2 个答案:

答案 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(); 
}