3

我有这个简单的一行代码:

$thisUserName = is_array($user) ? $user->name : $user;

在这里,$thisUserName是给的$user, 意味着条件is_array返回假, 即使print_r表明那$user是一个数组。

任何想法,任何人?

谢谢。

PS。我尝试将其更改为echo is_array($user) ? 'yes' : 'no',但它没有回应。

编辑:

print_r($user) 给出

stdClass Object
(
    [id] => 169
    [name] => Cedric
    [username] => pulpfiction
    [email] => xxx@gmail.com
    [password] => c22601b4ed1ac11a80955d6c0eeb1933
    [password_clear] => 
    [usertype] => Registered
    [block] => 0
    [sendEmail] => 0
    [gid] => 18
    [registerDate] => 2013-01-30 11:12:10
    [lastvisitDate] => 2013-02-24 19:45:45
    [activation] => 
    [params] => 

    [aid] => 1
    [guest] => 0
)
4

3 回答 3

14

$user是一个对象而不是一个数组。print_r()仍然会输出它看起来很漂亮,但是如果您仔细查看输出,您会发现并非所有内容都会显示为数组,它会列出对象。你应该使用is_object()

$thisUserName = is_object($user) ? $user->name : $user;
于 2013-03-01T12:06:10.870 回答
2

is_array()检查变量是否为数组。

但是,紧随其后的代码是$user->name,这意味着您实际上期望它是一个对象。is_array()不会为对象返回 true。

如果你想测试它是否是一个对象,你可以使用is_object()而不是is_array().

但是,最好检查它是否是您期望的类型的对象,在这种情况下您可以使用instanceof例如:

$thisUserName = ($user instanceof myUserClass) ? $user->name : $user

(显然,'myUserClass' 是您的用户类的类名)

希望有帮助。

[编辑]

在一个好的系统中,应该知道任何给定对象所期望的类名,并使用instanceof它来验证它。

但是,如果您不知道期望的类名,那么is_object()就足够了。

get_class()(您可以使用;找出对象的类get_classintanceof; 坚持下去is_object()

于 2013-03-01T12:07:31.003 回答
0

如果您使用的是 object ,那么试试这个例子

    <?php
    $user->name='my_name';
    echo (is_object($user)) ?$user->name:$user;
    ?>

//结果:my_name

于 2013-03-01T12:25:00.160 回答