Nasıl gelmez "bir şey ya da öl do ()"

4 Cevap php

Ben bir MySQL veritabanına erişmek için bir php app yazıyorum ve bir öğretici ediyorum, bu formun bir şey diyor

mysql_connect($host, $user, $pass) or die("could not connect");

Nasıl PHP kalıp kısmını çalıştırır ve böylece işlev başarısız olduğunu biliyor mu? Ben o "veya" kısmı nasıl çalıştığını soruyorum sanırım. Ben önce gördüm sanmıyorum.

4 Cevap

Ilk deyimi döndürür true, ardından tüm ifade olması gerekir true, bu nedenle ikinci bölümü asla çalıştırılmaz.

Örneğin:

$x = 5;
true or $x++;
echo $x;  // 5

false or $x++;
echo $x; // 6

Sorgu başarısız olursa, bu nedenle, die() deyimi değerlendirmek ve komut sona erecek.

PHP'nin or works like C's || (bu arada da PHP tarafından desteklenen hangi - or just looks nicer and has different operator precedence - see this page).

Bu son değeri karar vermek için yeterli bilgi var bir kez herhangi bir değerlendirme atlayın çünkü bir short-circuit operatörü olarak bilinir.

mysql_connect() DOĞRU döndürür eğer örnekte, daha sonra PHP zaten tam deyimi olursa olsun die() için evalutes ne TRUE değerlendirmek, ve dolayısıyla die() değil bilir 't değerlendirildi.

Sürecinde komut biten - mysql_connect() YANLIŞ dönerse, PHP böylece uzayıp ve die() evalute çalışırsa tüm deyimi DOĞRU veya YANLIŞ olacak olup olmadığını bilmiyor.

Bu or çalışır şekilde yararlanır sadece güzel bir hile.

Başkalarının açıklandığı gibi çalışır.

(Perl ile yaptığı gibi) bir istisna yükseltmek DEĞİLDİR olarak PHP, "öl" kullanmayın. Bunun yerine normal bir şekilde düzgün bir istisna.

die PHP yakalanmış olamaz, ve log değildir - bunun yerine ungracefully mesaj yazdırır ve hemen herkes bir şey söylüyor ya da vb size yeniden, olayı kaydetmek için herhangi bir fırsat vermeden komut sonlandırılıyor

'ungracefully' başarısız getirmedi:

//databasescript.php
$host=cleanAndValidate($_POST["host"]);
$user=cleanAndValidate($_POST["user"]);
$pass=cleanAndValidate($_POST["pass"]);

mysql_connect($host, $user, $pass) or die("Some of your database credentials must be wrong.");


//javascript.js
$.ajax({
        url: "databasescript.php",
      cache: false,
       type: "POST",
       data: {
                host: host,
                user: user,
                pass: pass
             },   
    success: function(data){
                      if(data=="Some of your database credentials must be wrong."){
                      {
                                alert("Uh-oh; it looks like there was a problem:\n" + data);
                      }
             }           
});

Açıkçası kavramının basit bir kanıtı olarak.

hayır? (O / w js tarayıcılarda aşağılayıcı değil hakkında bir şey söylemiyorum. Bugün bir bilgisayarınız varsa, o should js sağlamıştır.)