这是代码
foreach ( $form as $fieldName => $fieldValue ) {
$validationType = $validationCriterias[ $fieldName ] ?? null;
if ( $validationType ) { // is "username" at that point
call_user_func( $validationType );
}
}
function username( )
{
global $form;
if ( ! v::alnum( '-_' )->noWhitespace()->length( 2, 30 )->validate( $form[ 'username' ] ) ) {
$this->formErrorBag[ 'username' ] = 'User name must be between 2 and 30 characters please. No whitespace or special charactesr allowed, but "_" and "-" characters are allowed.';
}
}
在这个代码中,在循环中指示的地方,我有一个字符串“username”是$ validationType。 然后,我需要调用循环下面的函数username。
我尝试使用call_user_func,但它出现了这个错误:
'call_user_func()期望参数1是有效的回调函数 未找到“用户名”或功能名称无效'
从字符串“username”调用username()的正确方法是什么?
编辑:此代码已经在类方法中,所以如果可能的话,我需要从循环内部访问username()范围。
答案 0 :(得分:2)
我相信你的功能属于一个类,因此,你想要调用的任何函数都必须像$ this-> nameOfTheFunction()。
要调用您的功能,您可以执行以下操作: $ this-> $ validationType()或 call_user_func($ this-> $ validationType())
答案 1 :(得分:0)
如果你正在调用一个函数,我很确定你必须使用它背后的()
,在你的代码中你只使用了这个名字。你可能会尝试类似的东西:
if ( $validationType. "()" ) { // is "username" at that point
call_user_func( $validationType. "()" );
}
这是未经测试但可能有效。
答案 2 :(得分:0)
你的函数必须在同一名称空间中,然后你可以测试可调用的
$validators = ['username', 'surname', 'NotAFunction'];
foreach($validators as $func)
if(is_callable($func))
$func();
function username(){
echo 'validation username' . PHP_EOL;
}
function surname(){
echo 'validation surname' . PHP_EOL;
}
答案 3 :(得分:0)
根据您的评论,您的函数username()shoudn不在另一个方法中。这就是为什么call_user_func()没有找到它。
最好的方法是重构代码,将用户名作为另一种方法,这样您就可以将其称为$this->$validationType()
希望它有所帮助。