PHP:is_数组在不应该返回false时返回false

PHP:is_数组在不应该返回false时返回false,php,arrays,conditional-statements,Php,Arrays,Conditional Statements,我有一个简单的单行代码: $thisUserName = is_array($user) ? $user->name : $user; 这里,$thisUserName由$user给出,这意味着条件is\u array返回false,即使print\r显示$user是一个数组 有什么想法吗 谢谢 另外,我试着把它改成echo is_array($user)''“是”:“否”并且它回应“否” 编辑: 打印($user)给出 $user是一个对象而不是数组print\u r()仍将输出所有好

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

$thisUserName = is_array($user) ? $user->name : $user;
这里,
$thisUserName
$user
给出,这意味着条件
is\u array
返回false,即使
print\r
显示
$user
是一个数组

有什么想法吗

谢谢

另外,我试着把它改成
echo is_array($user)''“是”:“否”
并且它回应“否”

编辑:

打印($user)给出


$user
是一个对象而不是数组
print\u r()
仍将输出所有好看的内容,但如果仔细查看输出,您将看到并非所有内容都将显示为数组,它将列出对象。你应该使用

is\u array()
检查变量是否为数组

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

如果要测试它是否是对象,可以使用而不是
is\u array()

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

(其中“myUserClass”显然是用户类的类名)

希望有帮助

[编辑]

在一个好的系统中,应该知道任何给定对象所需的类名,并使用
instanceof
对其进行验证

但是如果您不知道预期的类名,那么
is\u object()
就足够了


(使用
get_class()
,您可以找到一个对象的类名;出于您自己的目的,了解您正在使用的系统(Drupal?)可能是值得的,但是在这个上下文中,一起使用
get_class
intanceof
来实际测试对象没有什么意义;只需坚持使用
is_object()

如果您正在使用对象,请尝试此示例

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


//结果:$user是数组还是实例化对象?因为$user->name should error是$user是一个数组,所以您知道
->
操作符属于对象,而不是数组,对吗?也许你需要
是_object()?或者您可能需要使用
[]`而不是
->
.var\u dump($user)显示什么?如果您想在数组中检查该用户,那么它可能应该在\u array.Jackpot Cryptic中。你怎么猜到$user会是这里的一个对象?@Jeremy-
->
语法是针对对象的。数组使用
=>
@Jeremy
$user->name
是对象的属性
name
$user
我更愿意使用
instanceof
来确认对象的实际类,而不仅仅是
是对象()
@Jeremy如果你能发布
打印的输出
@SDC可以为你提供一个使用
instanOf
的工作示例,但我们需要知道类名。编辑答案回答@Jeremy关于不知道类名的困惑。感谢解释@SDC
$thisUserName = is_object($user) ? $user->name : $user;
$thisUserName = ($user instanceof myUserClass) ? $user->name : $user
    <?php
    $user->name='my_name';
    echo (is_object($user)) ?$user->name:$user;
    ?>