以下输出是调用的结果var_export($charge);
如何访问'paid'=>truefrom 的输出$charge?任何想法,将不胜感激.
我试过了$charge->_values->paid,$charge->paid等等.我没有运气.
我也尝试过$charge['_values']['paid'];
Stripe_Charge::__set_state(array(
'_apiKey' => 'sk_test_BPZyFpcAM',
'_values' =>
array (
'id' => 'ch_102kMF29T6',
'object' => 'charge',
'created' => 1381688,
'livemode' => false,
'paid' => true,
'amount' => 104000,
'currency' => 'usd',
'refunded' => false,
'card' =>
Stripe_Card::__set_state(array(
'_apiKey' => 'sk_test_BPZyFpc',
'_values' =>
array (
'id' => 'card_102kMF29T6',
'object' => 'card',
'last4' => '4242',
'type' => 'Visa',
'exp_month' => 2,
'exp_year' => 2015,
'fingerprint' => '7sRY4jiFM',
'customer' => NULL,
'country' => 'US',
'name' => NULL,
'address_line1' => NULL,
'address_line2' => NULL,
'address_city' => NULL,
'address_state' => NULL,
'address_zip' => NULL,
'address_country' => NULL,
'cvc_check' => 'pass',
'address_line1_check' => NULL,
'address_zip_check' => NULL,
),
'_unsavedValues' =>
Stripe_Util_Set::__set_state(array(
'_elts' =>
array (
),
)),
'_transientValues' =>
Stripe_Util_Set::__set_state(array(
'_elts' =>
array (
),
)),
'_retrieveOptions' =>
array (
),
)),
'captured' => true,
'refunds' =>
array (
),
'balance_transaction' => 'txn_102kMF29T6Z',
'failure_message' => NULL,
'failure_code' => NULL,
'amount_refunded' => 0,
'customer' => NULL,
'invoice' => NULL,
'description' => 'admin@fra.org',
'dispute' => NULL,
'metadata' =>
array (
),
),
'_unsavedValues' =>
Stripe_Util_Set::__set_state(array(
'_elts' =>
array (
),
)),
'_transientValues' =>
Stripe_Util_Set::__set_state(array(
'_elts' =>
array (
),
)),
'_retrieveOptions' =>
array (
),
))
Run Code Online (Sandbox Code Playgroud)
And*_*gai 13
您可以使用__toArray($ recursive = false)函数以数组形式获取数据.
例:
$chargeArray = $charge->__toArray(true);
echo $chargeArray['paid'];
Run Code Online (Sandbox Code Playgroud)
在转换为数组之前,我还能够使用数组结构访问对象的数据.对我来说,$charge['paid']让我获得价值.
echo gettype($charge->paid); //boolean
var_dump($charge->paid); //bool(true)
if($charge->paid==true)echo "==true"; //==true
if($charge->paid===true)echo "===true"; //===true
if($charge->paid==1)echo "==1"; //==1
if($charge->paid===1)echo "===1"; //nada, it's a boolean, not numeric
Run Code Online (Sandbox Code Playgroud)
因此,使用if($charge->paid===true),您应该可以保证您正在测试您想知道的内容。
在 print_r 的输出中,您可以看到paid 显示为1。
[_values:protected] => Array ( [id] => ch_10as29724hknftGBm9TxC [object] => charge [created] => 1384696845 [livemode] => [paid] => 1 [amount] => 1400
Run Code Online (Sandbox Code Playgroud)
因此,根据评估付款的位置和方式,它可能显示为数字、字符串或布尔值。您可以对三种可能性进行一系列测试,或者只使用if($charge->paid){...}
当 pay 为 false 时,它可能会返回为空 ("")、0 或布尔值 false。一个可能需要注意的事情是布尔值 false 被转换为字符串,在这种情况下它将被解释为 true。
$val = "false";
if($val){
echo "true"; //true
}
Run Code Online (Sandbox Code Playgroud)
因此,在您的测试中,只需添加 intval($val) 来标准化值并确保安全。
if(intval($charge->paid)){...}
干杯