3

私はこの単純な1行のコードを持っています:

$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
)
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();それはあなたが使用しているシステムについて学ぶためにあなた自身の目的のために価値があるかもしれません(Drupal?)、しかし実際にオブジェクトをテストするためにこの文脈で一緒にget_class使用することはほとんど意味がありません; )intanceofに固執するis_object()

于 2013-03-01T12:07:31.003 に答える
0

オブジェクトを使用している場合は、この例を試してください

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

//結果:my_name

于 2013-03-01T12:25:00.160 に答える