2015-11-11 57 views
0

速記,如果在一個PHP數組將不起作用,即使我圍繞真正的大括號。速記,如果在PHP數組

工作代碼:

echo Nav::widget([ 
    'options' => ['class' => 'navbar-nav navbar-right'], 
    'items' => [ 
     Yii::$app->user->isGuest ? 
      ['label' => 'Login', 'url' => ['/site/login']] : 
      [ 
       'label' => 'Logout (' . Yii::$app->user->identity->username . ')', 
       'url' => ['/site/logout'], 
       'linkOptions' => ['data-method' => 'post'] 
      ], 
    ], 
]); 

的不工作代碼:

echo Nav::widget([ 
    'options' => ['class' => 'navbar-nav navbar-right'], 
    'items' => [ 
     Yii::$app->user->isGuest ? 
      (['label' => 'Registrieren', 'url' => ['/site/register']], 
      ['label' => 'Login', 'url' => ['/site/login']]) : 
      [ 
       'label' => 'Logout (' . Yii::$app->user->identity->username . ')', 
       'url' => ['/site/logout'], 
       'linkOptions' => ['data-method' => 'post'] 
      ], 
    ], 
]); 

我的理解是什麼問題,但無法找出一個workarround它。 有什麼建議嗎?

回答

-1

這行看起來錯誤:

(['label' => 'Registrieren', 'url' => ['/site/register']] 

你有一個開括號「(」但兩個封閉「]」括號,你可能想要刪除的那些

1

你必須有各有一個部分代碼評估,以法律的東西 - 這是不合法的:

Yii::$app->user->isGuest ? 
     (['label' => 'Registrieren', 'url' => ['/site/register']], 
     ['label' => 'Login', 'url' => ['/site/login']]) 

,因爲它會評估爲

['label' => 'Registrieren', 'url' => ['/site/register']], 
['label' => 'Login', 'url' => ['/site/login']] 

,如果他們是另一套[]圍繞整個事情,只會是有效的 - 例如,你不能這樣做:

$x = ['label' => 'Registrieren', 'url' => ['/site/register']], 
['label' => 'Login', 'url' => ['/site/login']]; 

,但你可以做

$x = [ 
    ['label' => 'Registrieren', 'url' => ['/site/register']], 
    ['label' => 'Login', 'url' => ['/site/login']] 
]; 

您的代碼需要更像

echo Nav::widget([ 
    'options' => ['class' => 'navbar-nav navbar-right'], 
    'items' => Yii::$app->user->isGuest ? 
      [ 
       ['label' => 'Registrieren', 'url' => ['/site/register']], 
       ['label' => 'Login', 'url' => ['/site/login']] 
      ] : 
      [ 
       [ 
       'label' => 'Logout (' . Yii::$app->user->identity->username . ')', 
       'url' => ['/site/logout'], 
       'linkOptions' => ['data-method' => 'post'] 
       ] 
      ] 
]); 
+0

這是正確的。儘管如此,我相信大多數開發人員會同意這樣的簡寫很難理解,不應該使用。定義變量更容易理解,因爲數組看起來會少得多。 – Andrius

+0

非常感謝!這解決了它。 – orbitkorbi