我有这个简单的一行代码:
$thisUserName = is_array($user) ? $user->name : $user;
此处,$thisUserName
由$user
提供,表示条件is_array
返回false,即使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
)
答案 0 :(得分:13)
$user
是一个不是数组的对象。 print_r()
仍然会将它看起来很好看,但是如果你仔细观察输出,你会看到并不是所有的都会说数组,它会列出对象。您应该使用is_object()
$thisUserName = is_object($user) ? $user->name : $user;
答案 1 :(得分:2)
is_array()
检查变量是否为数组。
但是,紧随其后的代码是$user->name
,这意味着您实际上希望它是一个对象。 <{1}}对于对象不会返回true。
如果您想测试它是否为对象,可以使用is_object()
代替is_array()
。
然而,检查它是否是您期望的类型的对象会更好,在这种情况下您可以使用instanceof
例如:
is_array()
(其中'myUserClass'显然是你的用户类的类名)
希望有所帮助。
[编辑]
在一个好的系统中,应该知道任何给定对象所期望的类名,并使用$thisUserName = ($user instanceof myUserClass) ? $user->name : $user
来验证它。
但如果您不知道期望的班级名称,那么instanceof
就足够了。
(您可以使用is_object()
找出对象的类名;为了您自己的目的,了解您正在使用的系统(Drupal?)可能是值得的,但使用{{在此上下文中1}}和get_class()
一起实际测试对象;只需坚持get_class
)
答案 2 :(得分:0)
如果您正在使用object,请尝试此示例
<?php
$user->name='my_name';
echo (is_object($user)) ?$user->name:$user;
?>
//结果:my_name