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

特别是片段:

($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());
4

2 回答 2

2

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

虽然它非常难看,而且不更具可读性。我会:

$client = $client[0];
$endpoint = $client->GetClientEndpoints()[0];
return array(....
于 2013-03-25T20:11:50.470 回答
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');

更新(感谢鲁迪

事实证明,上面的示例与作者的情况不同,因此一个更好的示例(抛出 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');
于 2013-03-25T20:13:32.630 回答