ardışık eğer PHP en

9 Cevap php

PHP şimdi bazı doğrulama yapıyorum ve ben örneğin, koşullu ifadeleri tahsis koşuyorum:


if ($this->email->isValid($email))
return false;
if ($this->username->isValid($username))
return false;

vb ..

Is there a nice way to do this? Or do I just run ten If statements like the ones above? I can't use switch obviously, but I'm looking for that type of solution..

P.S. .. Ben doğrulama için Zend Framework kullanarak ediyorum

9 Cevap

Böyle olabilir VEYA onlara:

if(cond1||
   cond2||
   cond3||
   cond4)
{
  return false;
}

Böyle bir şey yapıyor Guardian tamlaması denir. Aynı değeri döndürür hükümler gruplanmış olmalı böylece geliştirilebilir.

if ($this->email->isValid($email) || $this->username->isValid($username))
{
    return false;
}

Ya da bunun gibi, varsa çok (btw ben biçimlendirmek nasıl sadece çok daha iyi okuyabilir eğer, başka bir şekilde de ince olmalıdır)

if (
    $this->email->isValid($email) || 
    $this->username->isValid($username) || 
    $this->somethingelse()
   )
{
    return false;
}

Bu bir formdan veri ise sizin other question bir afiş tarafından tavsiye edilen, Zend_Form bir göz atın

Ben unsurları oluşturmak için doğrulayıcılar ekleyerek detayları bazı example code hangi yayınlanmıştır

Sadece üstündeki en belirgin doğrulama koymak emin olun, böylece onun başarısız gidiyor eğer her deyimi geçiyor önce açma yapar. Ayrıca, ben kıvırcık parantez olmadan eğer ifadeleri sevmiyorum, ama sonra sadece bir görüş meselesi bu.

Birden fazla getiri daha bazı var kullanmak her zaman iyidir

Durumda bu yalnızca dönüş koşulları vardır. Biz her koşulda kontrol etmek gerekmez. gerçek koşulları varsayılan veya tersi ile return false için gibi sadece çek.

$ Result = false; / / Varsayılan olarak false döndürür.

if (cond1 | | cond2) tek gerçek dönen yol koşulları için {/ / çek. :)

  $result = true;

}

$ return sonuç;

Alkış,

-Ratnesh

Ben onları benim sınıf veri üyeleri yapacak. Açıkçası burada form tahrik sınıfı sahip olmak zorunda kalacaktır. Yani burada, örneğin e-posta bir sınıfa sarılmış olabilir ve üye değişkenler olarak onlara sahip sınıfının yapıcı ile başlatılır. Şimdi e-posta sarıcı sınıf başlatma / inşaat e-posta doğrulama yapacak.

IMHO daha az karmaşık görünür ve e-posta sarıcı sınıfa herhangi bir doğrulama ya da belirli yöntemleri tamamlamayı olabilir.

Ben bazı bağlamda bir balyoz çekiç olabilir biliyorum; çok akıllıca seçin!

Belki böyle bir şey:

foreach( $form->getElements as $element => $value )
{ 
    if( !$element->isValid( sanitize($value))){
       return false;
    }
}

Eğer ZF kullanıyorsanız eğer tek bir kişi değil tüm alanları formu kontrol çünkü ANCAK bu oneliner cevap:

$form = new My_Zend_Form(); // in the controller action that you send the form to

if ( $form->isValid($_POST)) {
    // Success /// do whatever you want with the data
    $data = $form->getValues();
} else {
    //error
}

Böyle bir şey yapın:

$errlvl = 0;

if($errlvl == 0 && $this->email->isValid($email)){
    $errlvl++;
}

if($errlvl == 0 && $this->username->isValid($username)){
    $errlvl++;
}

// your validation list keeps going

if($errlvl > 0){
    return false;
}

bu irade

  1. Önünde bir hata varsa, aşağıdaki kontrol olmayacak çünkü fazlalığı azaltmak.
  2. Eğer listeye ekleyerek devam edebilirsiniz
  3. birçok hatalar meydana bilmek istiyorsanız, tablolarda $ errlvl == 0 kaldırabilirsiniz

Bir dizi ve yineleme tüm nesneleri Ekle (Ben veya Zend bir arayüz "doğrulayıcı" veya her bileşen (adınızı, e-posta, vb) "isValid" yöntemini uygulayan böyle bir şey kullanıyor sanırım):

$validators = array();
$validators[] = $this->email;
$validators[] = $this->username;

foreach ($validators as $validator)
{
    if (!$validator->isValid())
    {
        return false;
    }
}