首先让我说我正在使用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检查它的情况下进行操作是可行的。由于一个错误,我现在得到"正在尝试获取非对象的属性"。这意味着我想,由于它不存在,我正试图将它设置为一个变量,不管它会为它带来错误。我花了一天和昨天的大部分时间试图解决这个问题,我不得不说我被卡住了。php错误类型只不过是一个"通知",但我通常不喜欢让我的代码处于这样的状态,即使是这样的错误也会卷土重来。。也就是说我迷路了。。
你没有说,但这听起来像是等行的错误
$fbHomeTown = $fb_result->hometown->name;
当例如CCD_ 1属性不存在时。
防止这种通知的方法(你肯定应该努力获得完全无错误的代码(是这样做的:
$fbHomeTown = isset($fb_result->hometown->name) ? trim($fb_result->hometown->name) : null;
这会将临时变量设置为已知的安全值(修剪值或null
(。然后,您可以通过执行来明确检查没有值的情况
if($fbHomeTown === null) ... // 3 equal signs
然而,在很多情况下(包括你的情况(,你甚至不需要区分"不存在"answers"这是一个空字符串",你可以很容易地用之类的东西完成处理
echo "<strong>First Name: </strong>".
(empty($fbFirstName) ? "Not found.<br />" : $fbFirstName);