1

まず、CodeIgniter と Elliot Haughin が作成した Facebook クラスを使用していると言ってみましょう。http://www.haughin.com/code/facebook/私が持っている作業はすべて順調です。しかし、さまざまな FB アカウントでコードをテストしていたときに、評価したい問題に出くわしましたが、私の試みは失敗しました。私はググって他のフォーラムにアクセスしましたが、最初に思いついた答えを一貫して思いついています. 必ず機能するはずですが、この場合は機能しないようです..

私がそう言ったので、私の問題は..FBが返すオブジェクトには、常に特定のエントリがあるとは限りません。この例のために、ユーザー名を言います..

ユーザー名とともに返されるデータの例を次に示します。

facebookResponse Object
(
    [__construct:private] => 
    [__resp] => stdClass Object
        (
            [data] => stdClass Object
                (
                    [id] => 0000000000000
                    [name] => Random.User
                    [first_name] => Random
                    [middle_name] => ...
                    [last_name] => User
                    [link] => http://www.facebook.com/profile.php?id=000000000
                    [birthday] => 11/26/1980
                    [gender] => male
                    [timezone] => -4
                    [locale] => en_US
                    [verified] => 1
                    [updated_time] => 2011-05-30T19:24:53+0000
                )

ユーザー名のない例を次に示します。

facebookResponse Object
(
    [__construct:private] => 
    [__resp] => stdClass Object
        (
            [data] => stdClass Object
                (
                    [id] => 000000000000000000000
                    [name] => Random User
                    [first_name] => Random
                    [last_name] => User
                    [link] => http://www.facebook.com/Random.User
                    [username] => Random.User
                    [birthday] => 11/10/1985
                    [hometown] => stdClass Object
                        (
                            [id] => 000000000000000
                            [name] => Coventry, Connecticut
                        )

                    [location] => stdClass Object
                        (
                            [id] => 00000000000000
                            [name] => San Jose, California
                        )

これをトラブルシューティングしようとして最後に失敗した試みは、次のようになります..

        $fb_result = $this->facebook->call('get', 'me', array('metadata' => 1));
        $fbFirstName = $fb_result->first_name;
        $fbLastName = $fb_result->last_name;
        $fbUserName = $fb_result->username;
        $fbUserId = $fb_result->id;
        $fbHomeTown = $fb_result->hometown->name;
        $fbLocation = $fb_result->location->name;
        echo "<strong>First Name: </strong>"; if((isset($fbFirstName))AND(!empty($fbFirstName))AND(trim($fbFirstName) !== "")){echo $fb_result->first_name ."<br />"; }else{ echo "Not found.<br />"; }
        echo "<strong>Last Name: </strong>"; if((isset($fbLastName))AND(!empty($fbLastName))AND(trim($fbLastName) !== "")){echo $fb_result->last_name."<br />"; }else{ echo "Not found.<br />"; }
        echo "<strong>Username: </strong>"; if((isset($fbUserName))AND(!empty($fbUserName))AND(trim($fbUserName) !== "")){echo $fb_result->username."<br />"; }else{ echo "Not found.<br />"; }
        echo "<strong>User FB ID: </strong>"; if((isset($fbUserId))AND(!empty($fbUserId))AND(trim($fbUserId) !== "")){echo $fb_result->id."<br />"; }else{ echo "Not found.<br />"; }   
        echo "<strong>Location hometown: </strong>"; if((isset($fbHomeTown))AND(!empty($fbHomeTown))AND(trim($fbHomeTown) !== "")){echo $fb_result->hometown->name."<br />"; }else{ echo "Not found.<br />"; }
        echo "<strong>Location current (manual input): </strong>"; if((isset($fbLocation))AND(!empty($fbLocation))AND(trim($fbLocation) !== "")){echo $fb_result->location->name."<br />"; }else{ echo "Not found.<br />"; }

ただし、最初に変数として定義してから if-else でチェックする場所でそれを行うと、現在は機能しています。エラーで「オブジェクト以外のプロパティを取得しようとしています」というメッセージが表示されます。つまり、そこにないため、変数として設定しようとしているにもかかわらず、エラーが発生すると思います。私はこの問題を解決するために 1 日と昨日の大部分を費やしましたが、行き詰まっていると言わざるを得ません。PHPエラータイプは単なる「通知」に過ぎませんが、私は一般的に、そのようなエラーが戻ってくるような状態にコードを残すことは好きではありません..それは私が迷っている..

4

1 に答える 1

1

あなたは言いませんが、これは次のような行に対してエラーが発生したように聞こえます

$fbHomeTown = $fb_result->hometown->name;

たとえば、hometownプロパティが存在しない場合。

この通知を防ぐ方法 (完全にエラーのないコードを作成するように努力する必要があります) は、次のようにすることです。

$fbHomeTown = isset($fb_result->hometown->name) ? trim($fb_result->hometown->name) : null;

これにより、一時変数が既知の安全な値 (トリミングされた値またはnull) に設定されます。次に、最初から値がなかった場合を明示的に確認できます。

if($fbHomeTown === null) ...  // 3 equal signs

ただし、多くの場合(あなたのものを含む)、「存在しませんでした」と「空の文字列です」を区別する必要さえなく、次のような方法で簡単に処理を完了することができます

echo "<strong>First Name: </strong>".
     (empty($fbFirstName) ? "Not found.<br />" : $fbFirstName);
于 2011-07-04T21:39:36.247 に答える