2013-03-25 27 views
2
return array(
    'client_id' => $client[0]->getId(), 
    'client secret' => $client[0]->getSecret(), 
    'redirect_uri' => ($client[0]->GetClientEndpoints())[0]->getRedirectUri(), 
    'name' => $client[0]->getName()); 

具体的片段:从阵列返回函数直接引用的数组元素(PHP)

($client[0]->GetClientEndpoints())[0]->getRedirectUri() 

是否有一种方法可以做到这一点,而无需做:

$endpoints = $client[0]->GetClientEndpoints(); 
return array(
    'client_id' => $client[0]->getId(), 
    'client secret' => $client[0]->getSecret(), 
    'redirect_uri' => $endpoints[0]->getRedirectUri(), 
    'name' => $client[0]->getName()); 
+2

这语法在PHP 5.4中添加(我相信它是5.4)。所以,使用PHP> = 5.4。 – nickb 2013-03-25 20:11:47

回答

2

$client[0]->GetClientEndpoints()[0]->getRedirectUri()应该在PHP 5.4中工作。还没有5.4呢?你需要更新。

虽然它非常丑陋,而且不易读。我想:

$client = $client[0]; 
$endpoint = $client->GetClientEndpoints()[0]; 
return array(.... 
+0

谢谢,我尝试过 – 2013-03-25 20:17:17

+0

这是我用过的,我有时会忘记可读性的重要性 – 2013-10-05 09:55:01

1

我不知道是否会工作,但也许你可以尝试

http://www.php.net/manual/en/function.array-shift.php

return array(
    'client_id' => $client[0]->getId(), 
    'client secret' => $client[0]->getSecret(), 
    'redirect_uri' => array_shift($client[0]->GetClientEndpoints())->getRedirectUri(), 
    'name' => $client[0]->getName()); 

至少这个片段的作品没有任何错误:

<?php 
error_reporting(E_ALL); 

class class1{ 
    public function getRedirectUri() 
    { 
     return 'something'; 
    } 
} 

$arr1 = array(new class1(), new class1()); 

$arr = array(
    'client_id' => 'something', 
    'client secret' => 'something', 
    'redirect_uri' => array_shift($arr1)->getRedirectUri(), 
    'name' => 'something'); 

UPDATE(谢谢Rudie

事实证明,在样品上方是不相同的作者的情况下,这样一个更好的例子(其抛出E_STRICT,因此我的答案不应当被认为)是:

<?php 
error_reporting(E_ALL); 

class class2{ 
    public function getRedirectUri() 
    { 
     return 'something'; 
    } 
} 

class class1 { 
    public function getArrays() { 
     return array(new class2(), new class2()); 
    } 
} 
$var = new class1(); 

$arr = array(
    'client_id' => 'something', 
    'client secret' => 'something', 
    'redirect_uri' => array_shift($var->getArrays())->getRedirectUri(), 
    'name' => 'something'); 
+1

'array_shift'需要一个引用(带'&',你知道),而不是函数结果。这会产生警告或通知。 – Rudie 2013-03-25 20:14:47

+0

hm,见上面,我把error_reporting = E_ALL和上面的例子都没有 – Alexey 2013-03-25 20:17:26

+0

哦,对不起,我的坏,它与作者问题 – Alexey 2013-03-25 20:18:48