如何到达对象中的元素?

时间:2011-12-14 10:50:54

标签: php oop

我正在尝试访问对象数组中的元素。但我不能成功。 让我们将其视为一个名为$ 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

5 个答案:

答案 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;
  }

  ...
}