2014-05-20 30 views
9

yüzden aşağıdaki tip bir PHP deyimi vardır:PHP bir if deyimi değerlendirmek gibi görünüyor geriye

if ($x=function($y) || $z == 50) {

Ne oluyor bkz $ z 50 ise, $ x olsun olmamasıdır işlev hiç çağrılmadığı için ayarlayın. Bu gerçekten mümkün mü? Bunu kolayca düzeltebilirim (ve yaptım), ama sanırım bunun ne olduğu ve bunun gibi hatalar yapmadığımdan emin olmak istediğimden emin olmak istiyorum Bunun gibi VEYA ifadelerinin nasıl değerlendirildiğini bulmaya çalıştım. Php'nin nasıl derlendiğini görmek için bakabileceğim bir yer var mı?

+0

IMHO testleri takas iyi bir uygulamadır (niyetinin olduğunu düşünüyorum) yerine bu

if ( $x = ( function($y) || ($z == 50) ) ) 

benziyor daha yüksek önceliğe sahip olduğundan - İlk önce $ z == 50’dir. Geçiyor, fonksiyonu çağırmamız gerekmiyor. – hsz

+7

Koşullar, soldan sağa doğru değerlendirilir. Tam kod örneği veya olmadı. –

+2

Aşağıdaki cevaplarda görüldüğü gibi, koşullar soldan sağa değerlendirilmez, bunlar öncelik sırasına göre değerlendirilir. –

cevap

12

|| ifadeniz olur, yani = den higher precedence sahiptir:

$x = (foo($y) || ($z == 50)); 

Bu $x hep true veya false ya olacağı anlamına gelir. Başka hiçbir şey.

Dene:

if(($x = foo($y)) || ($z == 50)) 

Veya daha okunabilir:

$x = foo($y); 
if($x || $z == 50) 
16

Sen operatör öncelik sorunu var. Kontrol bu http://www.php.net/manual/en/language.operators.precedence.php

||= Kişisel ifadesi gerçekten

if ( 
    ($x = function($y)) || ($z == 50) 
) 
+0

Üzgünüm, sadece birkaç saniye çok yavaş;) –

+2

@NiettheDarkAbsol İyi cevap asla yavaş değil – mleko

+0

Evet, gerçekten, tam olarak bu! Ugh, çalışmasını sağlamak için parantez eklemeyi bile denedim, ama yanlış anlamış olmalı. Şimdi çok basit (ve aptal) görünüyor! Teşekkürler! – user3656957