PHP: проверьте, является ли переменная экземпляром определенного класса - PullRequest
18 голосов
/ 19 ноября 2009

Каждый раз, когда я получаю переменную через $ _GET, я хочу убедиться, что это действительно объект класса User.

Итак:

if (isUser($_GET['valid_user']))
{
...
}

есть ли встроенная функция для использования вместо так называемого "isUser"?

Большое спасибо!

Ответы [ 5 ]

46 голосов
/ 19 ноября 2009

Вы можете проверить любую переменную для определенного класса:

if ($my_var instanceof classname)

однако, в вашем случае это никогда не будет работать, так как $ _GET ["valid_user"] приходит из запроса и никогда не будет объектом.

isUser (), вероятно, является пользовательской функцией из библиотеки управления пользователями, которая аутентифицирует текущий сеанс. Вам нужно посмотреть, как это работает, если вы хотите заменить его.

5 голосов
/ 19 ноября 2009

В языке PHP есть функция, которая может вам помочь:

bool is_a ( object $object , string $class_name )

Из документации : Проверяет, принадлежит ли объект этому классу или имеет этот класс как один из его родителей

2 голосов
/ 19 ноября 2009

Вы можете попробовать это:

if (is_object($_GET['valid_user']))
{
     // more code here
}
0 голосов
/ 19 ноября 2009

$ _ GET [] переменные являются более константами, чем переменные, они только для чтения ... но к ним обращаются так же, как и к любым другим $variable.

В вашем примере:

if (isUser($_GET['valid_user']))
{
...
}

Я бы надеялся , что он будет читать:

if (isUser($some_sanatized_variable))

.. если только isUser () не делает этого. «Переменные», которые устанавливает PHP, не принадлежат ни к какому классу, что иллюстрирует мое беспокойство о том, что isUser () может не знать, с чем имеет дело.

0 голосов
/ 19 ноября 2009

is_object для проверки, является ли это объектом, и ссылка ниже объясняет, как проверить, какой класс

http://hr.php.net/manual/en/reflectionclass.isinstance.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...