我正在尝试访问对象数组中的元素。但我不能成功。 让我们将其视为一个名为$ result的对象 我怎样才能到达maskedNumber?
Braintree_Result_Successful Object
(
[success] => 1
[_returnObjectName:private] => customer
[customer] => Braintree_Customer Object
(
[_attributes:protected] => Array
(
[creditCards] => Array
(
[0] => Braintree_CreditCard Object
(
[_attributes] => Array
(
[maskedNumber] => ***********5897
答案 0 :(得分:2)
由于_attributes
的{{1}}属性受到保护,因此您需要定义一个访问器方法。 Braintree_Customer
的另一个_attributes
属性看起来也应该受到保护,所以我假设存在一个相同的访问者:
Braintree_CreditCard
要在两个类中放置的访问器方法:
$cards = $object->customer->getAttribute('creditCards');
$number = $cards[0]->getAttribute('maskedNumber');
修改强>
为了改进我的原始答案,我会在实际的访问器方法中进行一些不错的错误检查。
function getAttribute($attribute) {
return $this->_attributes[$attribute];
}
您还可以考虑使用magic methods function getAttribute($attribute) {
if (isset($this->_attributes[$attribute])) {
return $this->_attributes[$attribute];
}
return NULL;
}
和__get()
充当getter和setter。
答案 1 :(得分:1)
我通过询问braintreepayments解决了这个问题。他们说我可以在将用户添加到braintree后检索这些数据。但我的解决方案是,如果我真的需要它,一开始就是采用REGEX。对于那些正在寻找优秀在线支付公司的人,我建议你选择braintree
答案 2 :(得分:1)
我知道这已经过时了,但这可能有所帮助。
Braintree有返回从Braintree_Customer :: create()等函数返回的受保护信息的方法;
$result = Braintree_Customer::create(array(
'firstName' => $_POST['first_name'],
'lastName' => $_POST['last_name'],
'email' => $_POST['email'],
'creditCard' => array(
'cardholderName' => $_POST['cardholder_name'],
'number' => $_POST['number'],
'expirationMonth' => $_POST['month'],
'expirationYear' => $_POST['year'],
'cvv' => $_POST['cvv'],
'billingAddress' => array(
'postalCode' => $_POST['postal_code']
)
)
));
var_dump($result->customer->__get('id'));
var_dump($result->customer->__get('creditCards'));
客户的_attributes受到保护,但get函数会返回它们。 此方法不需要从Braintree重新请求数据。
答案 3 :(得分:0)
试
$Result->customer->_attributes['creditCards'][0]->_attributes['maskedNumber']
答案 4 :(得分:0)
使用$result->customer
你应该获得* Braintree_Customer *对象然后在该对象中你应该有方法来检索卡片,因为这些方法受到保护而且无法直接访问。像
$customer = $result->customer;
foreach($customer->getCreditCards() as $card)
{
echo $card->getMaskedNumber(); // You will need to create that method too
}
getCreditCards方法示例:
Class Braintree_Customer
{
protected $creditCards;
function getCreditCards()
{
return $creditCards;
}
...
}