2011-12-14 5 views
0

オブジェクト配列内の要素に到達しようとしています。しかし、私は成功することができませんでした。 $ 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

私はbraintreeに頼んで、クレジットカードの作成後に取り出せるようです。今問題を解決しました – SNaRe

答えて

1

私はbraintreepaymentsを求めて問題を解決しました。彼らは、私がbraintreeにユーザーを追加した後、このデータを取得できると言っていました。しかし、私の解決策は、私が最初にこれを本当に必要とするかどうかは、REGEXで取ることであろう。偉大なオンライン決済会社を探している人のために、私はあなたが脳裏に行くことをお勧めします

0

あなたは* Braintree_Customer *オブジェクトを取得する必要がありますし、そのオブジェクトにあなたがそれらのメソッドが保護されているとして、カードを取得するためのメソッドを持っていなければならないし、直接アクセスすることはできません$result->customer

$Result->customer->_attributes['creditCards'][0]->_attributes['maskedNumber'] 
+1

PHPは許可しません:char。 – SNaRe

+0

@SNaReは私の答えを更新 – diEcho

+0

注意:Braintree_Customerの未定義のプロパティ:_attributes in – SNaRe

0

を試してみてください。 getCreditCards方法の

$customer = $result->customer; 
foreach($customer->getCreditCards() as $card) 
{ 
    echo $card->getMaskedNumber(); // You will need to create that method too 
} 

例のようなもの:

Class Braintree_Customer 
{ 
    protected $creditCards; 

    function getCreditCards() 
    { 
    return $creditCards; 
    } 

    ... 
} 
+0

私はどのような方法で作成しますか? – SNaRe

+0

getCreditCards()とgetMaskerNumber()、これらの保護された属性にアクセスできるようになりました。もしあなたが私たちにもっと詳しいことができるこれらのクラスを宣言していることを私たちに示したら.. – SERPRO

+0

私は方法をコード化する方法を知らない。あなたは例を挙げることができますか? – SNaRe

2

Braintree_Customer_attributes財産が保護されているので、あなたはアクセサメソッドを定義する必要があります。保護されることになっているようBraintree_CreditCardの他_attributes性も見えますので、私は同じアクセサが存在しなければならないと仮定しました。両方のクラスに配置する

$cards = $object->customer->getAttribute('creditCards'); 
$number = $cards[0]->getAttribute('maskedNumber'); 

アクセサメソッド:

function getAttribute($attribute) { 
    return $this->_attributes[$attribute]; 
} 

編集:

ちょっと私の元の答えを少し改善するために、私は実際のアクセサメソッドでいくつかのまともなエラーチェックを入れます。

function getAttribute($attribute) { 
    if (isset($this->_attributes[$attribute])) { 
     return $this->_attributes[$attribute]; 
    } 
    return NULL; 
} 

また、ゲッターとセッターとして機能するようにmagic methods__get()__set()の使用を検討できます。

+0

あなたの説明は素晴らしいですが、私はこのエラーがあります。おそらく少し編集すれば問題は解決します。 致命的なエラー: – SNaRe

+0

の非オブジェクトのメンバ関数getAttribute()を呼び出す@SNaRe $ object変数( 'var_dump()'または 'get_class()')をチェックしてからcustomerプロパティ、もしエラーが私の2行目のコードに関するものであれば、$ cards [0]の手続きを繰り返してください:) – Pete171

+0

何か修正しましたが、別のエラーが発生しました 致命的なエラー:未定義のメソッドBraintree_Customer :: getAttributeを呼び出してください – SNaRe

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からのデータの再要求は必要ありません。

関連する問題