Php 致命错误:未捕获错误:函数名必须是字符串

Php 致命错误:未捕获错误:函数名必须是字符串,php,Php,最近我升级到了PHP7,以前的代码在我的旧版本的PHP上工作,我不太确定如何解决我当前的问题,有没有任何推荐的阅读资料可以让我了解最新版本的PHP?我也一直在慢慢地阅读手册,尽管需要一些额外的资源,但我目前的错误在第32行,我认为这与 PHP代码 <?php require ("classes/Login.php"); require ("classes/Database.php"); if ($_SERVER['REQUEST_METHOD'] == 'POST')

最近我升级到了PHP7,以前的代码在我的旧版本的PHP上工作,我不太确定如何解决我当前的问题,有没有任何推荐的阅读资料可以让我了解最新版本的PHP?我也一直在慢慢地阅读手册,尽管需要一些额外的资源,但我目前的错误在第32行,我认为这与

PHP代码

<?php 

require ("classes/Login.php");
require ("classes/Database.php");

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        $login = new Login();
        $email = $password = "";
        $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);     

        $email = $post['email'];
        $password =  $post['password'];     
        $errors = array();

        $fields = array(
        'email' => array(        
            'validate' => 'validEmail',
            'message' => 'Enter a valid email address',
            'value' => $email,
        ),
        'password' => array(         
            'validate' => 'emptyPassword',
            'message' => 'Password required',
            'value' => $password,
        )
        );


        foreach($fields as $key => $value) 
        {
            $validation_result = $login->$value['validate']($value['value']);

            if(!$validation_result) 
            {
                $errors[] = ['name' => $key, 'error' => $value['message']];
            }
        }

     if(empty($errors))  
        {  
            $db = new Database;
            $query = "SELECT userId,email,username,password FROM users WHERE email = :email";   
            $stmt = $db->prepare($query);    
            $stmt->bindValue(':email', $email);  
            $stmt->execute();   
            if(!$results = $stmt->fetch())  
            {  
                //  email did not match  
                $errors[] = ["name" => "email", "error" => "Incorrect password"];  
            }  
            else   
            {  
                // verify the password  
                if(!password_verify($password, $results['password']))  
                {  
                    // the password did not verify  
                       $errors[] = ["name" => "password", "error" => "Incorrect password"];    
                }  
                else  
                {  
                    // the password did verify 
                    session_start(); 
                    // this is the success response  
                    $success = ['response' => 'true'];   
                    $_SESSION['userId'] = $results['userId'];   
                }  
            }
        }


    }

header('Content-Type: application/json');
if (empty($errors))
{
    echo json_encode($success);
}
else
{
    echo json_encode(["errors" => $errors]);
}   
第32行:

$validation_result = ($login->$value)['validate']($value['value']); 
我发现

$validation_result = {$login->$value['validate']}($value['value']);
对我有用。

啊,来吧。至少指向第32行所在的位置。我假设它是
$login->$value['validate']($value['value'])
。您想在这里做什么?尝试运行验证,我想我真的应该添加该类以保持清晰,尽管它现在有一点空间
$login->${$value['validate']}($value['value'])
$validation_result = {$login->$value['validate']}($value['value']);