Inline beklenmeyen etiketi T_ECHO eğer

6 Cevap

Ben görüşlerimi birinde böyle bir şey var

<li <?php $isCurrent ? echo 'class="current"' : ''?> >
    <a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a>
</li>

Bu bir sözdizimi hatası, beklenmedik T_ECHO neden olur. echo print sorunu çözer değişiyor, ama ben kullanamıyorum neden anlamak istiyorum echo.

6 Cevap

Bu yapıyı bu şekilde kullanamazsınız. ternary operator bir "eğer" blok değil, koşul yerine olup olmadığını dayalı bir değer döndürür.

Sen yapısını değiştirmek istiyorsanız:

<?php echo  ($isCurrent ? 'class="current"' : '') ?>

bir dönüş değeri olan bir fonksiyon olduğu için print() ile çalışır. Ilk echo print hiçbir mantıklı sonucu yazdırmak olacak çünkü, ne istediğinizi ancak değildir.

Bu yankı, bir işlev değil, çünkü echo ile çalışır, ancak bir dil oluşumu değildir.

Değişim

<?php $isCurrent ? echo 'class="current"' : ''?>

karşı

<?php echo $isCurrent ? 'class="current"' : ''?>

Kimden documentation:

echo() is not actually a function (it is a language construct), so you are not required to use parentheses with it. echo() (unlike some other language constructs) does not behave like a function, so it cannot always be used in the context of a function. Additionally, if you want to pass more than one parameter to echo(), the parameters must not be enclosed within parentheses.

Bu yerine çalışıyor:

<?php $isCurrent ? print('class="current"') : ''?>

Neyse, kötü kodlama var. Daha İyi

<?php echo $isCurrent ? 'class="current"' : ''?>

Bu IMHO okumak ve işlemek için çok daha kolaydır

<?php printf('<li%s><a href="%s" class="%s">%s</a></li>',
              $isCurrent ? ' class="current"' : '',
              $someLink, $someClass, $someText);

Ben tamamen üçlü operatör ve boş basılı dize damla ve yazarsınız:

<?php
$isCurrent and print 'class="current"';
?>

Ben bu küçük düzeltme sorununuzu çözecektir düşünüyorum:

<li <?php echo ($isCurrent ? 'class="current"' : '')?> >
    <a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a>
</li>