在 php 中过滤时误解了如何正确使用回调

Misanderstanding how to proper use callback while filtering in php

我想从 PHP 中的表单中正确检查用户数据。我正在使用过滤器 class。我需要使用回调函数来检查密码。为此,我在 twentieths 点(回调过滤器)上使用了本教程: http://www.phpro.org/tutorials/Filtering-Data-with-PHP.html#21

但是我仍然得到这个错误:

"Warning: filter_var(): First argument is expected to be a valid callback" error.

这是我的 class :

class Callback {

private function validPasswd($sPasswd) {

        $r1 = '/#[A-Z]+#/';  //at least one uppercase
        $r2 = '/#[a-z]+#/';  //at least one lowercase
        $r3 = '/#[!@#$%^&*()\-_=+{};:,<.>]+#/';  // at least one special char
        $r4 = '/#[0-9]+#/';  //at least one number

        if (preg_match($r1, $sPasswd)) {
            return false;
        }
        if (preg_match_all($r2, $sPasswd)) {
            return false;
        }
        if (preg_match_all($r3, $sPasswd)) {
            return false;
        }
        if (preg_match_all($r4, $sPasswd)) {
            return false;
        }
        if (strlen($sPasswd) < 8) {
            return false;
        }
        return $sPasswd;
    }
}

这是我方法的一部分:

    public function createAccountAction() {
    //get password from form to verification.
    $sPasswd = $_POST['password'];

    //prepare all values to be checked with a filter
    $aOptions = array(
        'first-name' => FILTER_SANITIZE_STRING,
        'last-name' => FILTER_SANITIZE_STRING,
        'login' => FILTER_SANITIZE_STRING,
        'password' => array(
            'filter' => FILTER_CALLBACK,
            'options' => 'validPasswd'
        ),
        'email' => FILTER_SANITIZE_EMAIL,
        'conf-email' => FILTER_SANITIZE_EMAIL
    );
    var_dump(filter_var($sPasswd, FILTER_CALLBACK, array("options" => array("Callback"=>"validPasswd"))));

命名空间和使用是正确的。我觉得是我调用方法的方式不好。

您应该提供应调用该方法的实例和要调用的方法。


如果在Callback中定义了createAccountAction方法:

return filter_var($sPasswd, FILTER_CALLBACK, ["options" => [$this, "validPasswd"]]);


如果createAccountAction方法定义在别处:

// Give Callback::validPasswd public access and...
return filter_var($sPasswd, FILTER_CALLBACK, ["options" => [new Callback, "validPasswd"]]);