@Avery007

Как исправить ошибку: Argument 1 passed to User::Auth() must be an instance of string, string given?

Код функции Auth, класса User:
public  function Auth(string $login, string $password) 
{ 
     if (isLoginExist($login)) return "badlogin"; 
     $result = $this->db->getRow("SELECT * FROM `users` WHERE login='$login' and password='$password'"); 
     if (empty($result)) return false; 
        return true; 
}

Сам вызов:
$user = new User();
echo $user->Auth('test', 'test');


Ошибка гласит, что первый аргумент, переданный User::Auth() должен быть строкой, строка передана.
Это вообще нормально?
  • Вопрос задан
  • 16741 просмотр
Решения вопроса 3
Первый аргумент должен быть не строкой а объектом класса string, как и второй.
В php можно уточнить только или имя класса или тип array.
Исправить, соответственно, можно или убрав уточнение или скормив ему объекты класса String.
Ответ написан
Прочтите здесь, как написали выше, при даной конструкции
public  function Auth(string $login, string $password)
php считает что переменая login будет является объектом класса string, а вы передаете строку.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Type hinting для скалярных типов данных всё ещё не поддерживается.
Когда добавят - непонятно. RFC уже полтора года висит: https://wiki.php.net/rfc/scalar_type_hinting_with_cast

if (isLoginExist($login)) return "badlogin";
Если такой логин есть, то вернуть badlogin?
В следующей строке предполагается, что экранировать данные должен клиентский код, а не DBAL самостоятельно?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы