2013-03-25 26 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