Ben (die el ettikten sonra bir PHP Blok nasıl) Statik HTML Ekran musunuz?

9 Cevap php

Diyelim ki, bu gibi bazı kod var diyelim: />

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>

Ben bu kodun amacı basittir umuyoruz. Belli bir durum (yani veritabanına bağlanamıyor) bir araya geldi ise, o programın ölmek gerekir, ama aksi yürütmek gerekir. Die () fonksiyonu çalıştırıldığında benim sorun ortaya çıkar. Bu right orada durur, ve tarayıcısına sadece ilk üç satır gönderir, fakat son iki satır.

Php topakları yürütme durdurmak böylece ben kalıp yerine kullanabileceğiniz bir funciton () var mı, fakat statik HTML metin hala üzerinden gönderilir?

9 Cevap

Bir ayrı dosyalar ve işlevleri içine başlık ve altbilgi dışarı ayrılması gerekmektedir. Bu korumak için UI çok daha kolay hale getirir ve görünümü render için tutarlı şeyleri tutar. Çift o Exception handling kullanarak ve altın demektir ile.

<?php

printHeader(); // outputs the html header
try
{
    if (some condition)
    {
        throw new Exception("It Died...");
    }
    // More processing here that should not execute if the above condition is true
    // ...
}
catch (Exception e)
{
    echo $e->getMessage();
}
printFooter(); // outputs the html footer

?>

Sunumdan program mantığı decouple. MVC, şablonları hakkında okuyun.

Basit şekliyle bu gibi gider:

<?php

function logic()
{
  if (!$someCondition){
    return 'display_empty_page';
  }
  else{
    return 'display_other_stuff';
  }
}

presentation(logic());



Diğer durumlarda, burada die() ya da (örneğin ölümcül bir hata veya 3. taraf kod ölüyor) kaçınılmazdır, hack çıktı işleyicisi var karıştığı oluyor:

ob_start('myhandler'); 
function myhandler($page) {return $page.' extra markup';}
die();

Bunu kullanarak tavsiye rağmen sadece tanısal / hata ayıklama amaçlı.

DIE statik metnin bir parametre geçmek.

Örneğin bu değiştirin:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>

Buna:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die("OMG RED ALERT!!!!</body></html>");
}
else{
  #Do something
}
?>
</body>
<html>

Herhalde durumlar kullanmak istiyorum. Bir try / catch bloğu her şeyi sarın, sonra bir veritabanı hatası gibi bir hata durumu hakkında yeni bir istisna. Sen (boş bir kalıp () yöntemi gibi) catch bloğunda hiçbir şey yapamadı, ama burada kullanıcıya bir hata mesajı sunmak için daha iyi olurdu.

Burada onlarla aşina değilseniz veya PHP4 beri nelerin değiştiğini tazelemek için ihtiyaç halinde PHP5'ta bir pretty good guide istisna işleme bulunuyor.

Eğer register_shutdown_function (php.net) to finish loading the page? It should be able to handle die() ve exit() kullanarak içine baktım.

Bu programı sonlandırır ve gerçekten bir şey yapmak için bir şans daha vermez çağrı yani - Eğer bakarsanız the PHP Documentation siz "Eşdeğer (çıkmak için)" olduğunu görürsünüz. Hatta ZF dışında yapabileceğiniz bir sürü uygulama die () s yok. Çözelti İstisnalar kullanmaktır.

Yakalanmamış istisna aslında (oluşturulan alır yığın izleme dışında) bir kalıbın (as) aynı şeydir. Ne bir istisna size hatayı düzeltmek ve programı ile devam (ya da bir dost hata iletisi görüntüler ve bir günlük oluşturmak) için fırsat vererek, bir try / catch bloğu koymak yeteneği verir. Eğer Zend_Controller_Front kullanıyorsanız varsayarsak, onlar yakalanmamış özel durumları yakalamak ve uygun bir hata iletisi görüntüler varsayılan bir hata işleyicisi yapmak nasıl görmek için Zend Framework Quickstart kontrol edebilirsiniz.

Ben arıyorum tam olarak ne işler değil ama bir yöntem, die("</body></html>") ile die() olarak değiştirin olacaktır. Dönmek için metin bundan daha karmaşık olsaydı, bu, diyelim ki, bir değişkende saklanabilir. Bu daha iyi bir şey var mı?

die() Burada tam olarak ne istediğini olmayabilir. Neden yerini

if (!$someCondition) { 
    die();
} else {
    /* do stuff */
}

ile

if ($someCondition) {
    /* do stuff */
} else {
    /* output error message/redirect/output nothing/whatever */
}

ya da bir özel durum yakalamak / atmak?

Eğer PHP4 ile çalışıyoruz, ya da sadece istisnalar ile rahatsız etmek istemiyorsanız, o zaman bu tekniği kullanabilirsiniz:

<html>
<head><title>Title</title></head>
<body>

<?php
do {
    if (!$someCondition){
          break;
    } else {
          #Do something
    }
} while (0);
?>
</body>
<html>

Bazı insanlar uygun yorumladı bu tarzı kullanarak oldukça zıt gibi görünse de .. ben onunla herhangi bir sorun görmüyorum. Ben sizin her kalıp () ifadeleri içinde "altbilgi" kod çoğaltma çok daha iyi olduğunu söyleyebilirim.