2010-12-21 9 views
21

&& "ve" ile aynıdır ve || PHP'de "veya" ile aynı mıdır?PHP - ve/veya anahtar kelimeler

Birkaç test yaptım ve aynı şekilde davrandıkları görülüyor. Herhangi bir farklılık var mı?

Değilse, kelime eşdeğerleri olan başka PHP işaretleri var mı ve kodun okunmasını daha kolay hale getirdiğini düşünüyor musunuz?

+0

Eski VB programcısı, ey? Evet, 'VE, AND, ancak' & 'AND (bitwise) 'dir. Sırasıyla '||' ve '|' için Liekwise sırasıyla OR ve OR (bitsel) olur. :: Geri aldım, PHP AND/OR kelimelerine izin veriyor - şaşırtıcı. Her gün yeni bir şey öğrenin. –

+0

hayır :) Turbo Pascal ile başladım ve itiraf etmeliyim pascal synthax daha çok :) – Alex

+1

@Alex: Ah, Pascal/Delphi günleri. Ne kadar seviyorum, err demek _love_, o günler ... –

cevap

34

and ve or&& ve || daha yüksek düşük önceliğe sahiptir. Daha doğru olması için && ve ||, atama işlecinden (=) daha yüksek önceliğe sahiptir; and ve or ise daha düşüktür.

http://www.php.net/manual/en/language.operators.precedence.php

Genellikle bir fark yaratmaz ama bu fark hakkında bilerek bazı beklenmedik davranışlara neden olabilir değil durumlar vardır. Burada örneklere bakın:

http://php.net/manual/en/language.operators.logical.php

+1

http://php.net/manual/en/language.operators.php adresindeki yorumlar, '=' ile ilişkili olarak farklı önceliklere sahip olduklarını gösterir. –

+0

@Thomas: cevabımdaki ilk bağlantıda belgelenmiş olan;) Ama ... aslında bu belki de en önemli farktır. Cevabı ekleyeceğim. – Mchl

+1

'veya' öğesinin atamadan önce önceliği yararlı olabilir: $ page = get_page() veya $ page = 1; –

5

Evet, onlar mantıklı aynıdır. (İnanıyorum "& &" ve "||" Zend coding standards tercih seçimdir, ama hepsi bir rüya. Ya da bir şey olabilir bu yüzden, bu konuda herhangi bir özel bilgi bulamıyorum.)

O şunları söyledi:

  1. "& &" ve "||" higher precedence'dan "AND" ve "OR" dan (hiç alakalı olma ihtimali yoktur, fakat asla bilmezsiniz). Bununla bir gitmek için bir fikir olabilir bu yüzden

  2. diğer dillerin bir sürü

    ziyade metinsel muadillerine göre, "& &" ve "||" kullanırlar.

  3. Seçtiğiniz operatör kümesini sürekli kullandığınız sürece, bu gerçekten önemli değil.

+0

İki işleç arasında "=" (atama) önceliği varsa - ki bu aslında bir durumdur (http://php.net/manual/en/language.operators.precedence.php).)! –

2

Beni asıl rahatsız olduğunu:

echo (false and false ? true : true); 
// (empty/false) 

Sen tek olası çıkış var tahmin edebileceğiniz "1" olgu yoktur olarak (doğru) olan olabilir çıktı sahte ... .. ama bu "" (yanlış) olacaktır.

bu durumda en azından satifies beklentilerimin bir operatör olarak & & kullanma:

echo (false && false ? true : true); 
// 1 

Yani, kullanım konularda bazı durumlarda ciddi.

0

Fark, öncelikli üzerindedir. Ama sadece birbirleriyle karşılaştırılmamış!

Çoğu durumda bunu umursamazsınız, ancak bir adım geri atmanız ve büyük resme bakmanız gerektiğinde belirli durumlar vardır.örneğin, bu atın: Bu üretecek

// The result of the expression (true && false) is assigned to $g 
// Acts like: ($g = (true && false)) 
$g = true && false; 

// The constant true is assigned to $h before the "and" operation occurs 
// Acts like: (($h = true) and false) 
$h = true and false; 

var_dump($g, $h); 

sırasıyla:

başka deyişle
bool(false) 
bool(true) 

, &&http://php.net/manual/en/language.operators.precedence.php belirtildiği gibi and daha yüksek önceliğe sahiptir = daha yüksek tercihi vardır. (Diğer cevaplarda zikredilir, fakat yanlış bir kullanım mantıksal hatalara yol açabileceğinden ayrıntıya değineceğimi düşünüyorum.)

Umarım size yardımcı olabilir. Daha fazlasını bulabilirsiniz http://php.net/manual/en/language.operators.logical.php