Nasıl bir özel durum nesnesi eğer durumda false değerlendirmek yapabilirsiniz?

3 Cevap php

If ifadesinde yerleştirilir eğer benim nesne dönüş yanlış yapmak için herhangi bir yolu var olsaydı ben sadece merak ediyorum. Nedeni, özel bir istisna sınıfı yapıyorum edilir. Ben çizgisinde bir şey yapmak mümkün olmak istiyorum

class Dog{

   public function lookAround()
   {
        if(seeDog())
        {
            return bark;
        }
        else
        {
            return sit;
        }
   }

   public function seeDog()
   {
        if(object == Dog)
        {
             return "husky";
        } 
        else
        {
             return Dog_Exception(no_see);
        }
   }
}

Ben bu horrendously aptal örnek olduğunu anlıyoruz. Ancak, gelin bu nesne haliyle, if(seeDog()) deneme true dize de "husky" için ve Dog_Exception nesne için değerlendirmek olacaktır. Eğer mümkünse, ben bir if durumda yerleştirilir eğer Dog_Exception, false değerlendirmek istiyorum. Bu şekilde ben, örneğin, ben bu mümkün şüpheliyim if(typeof(seeDog()) == Dog_Exception), vb gibi bir yapı kullanmak zorunda değildir, ancak herhangi bir yardım büyük olurdu. Teşekkürler!

3 Cevap

Neden bir istisna dönüyor? Bunu atma gerekmiyor mu?

ne bir try catch gibi bir şey hakkında? Eğer dönmek istisna atmak gerekir.

function inverse($x) {
if (!$x) {
    throw new Exception('Division by zero.');
}
    else return 1/$x;
}

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

via: http://us3.php.net/manual/en/language.exceptions.php

Ben kendimi bu yapmak için çalışan ve çalışmak için görünür bir çözüm bulundu.

Farklı bir çözüm kullanmak asker anlatarak soruyu cevaplamak için çalışıyorlardı diğerlerine yanıt olarak, ben de sorunun nedenini açıklamaya çalışacağız. Orijinal poster veya ben ne nokta istisna işleme özellikleri kullanmak ve biz noktadan içeri bu sınıfı kullanan bir kod bu yükü koymak değil, çünkü bir istisna kullanmak istiyorsanız, en azından benim için, bu kullanmak mümkün oldu sorunsuz olmayan bir nesne yönelimli veya non-istisna tabanlı tarzında yazılmış olabilir diğer PHP kodu sınıf. Birçok yerleşik PHP fonksiyonları başarısız işlemleri için sahte bir sonucu arzu edilir olduğu şekilde yazılır. Aynı zamanda, biz kendi kodunda özel bir şekilde bu nesneyi idare edebilmek isteyebilirsiniz.

Örneğin, böyle bir şey yapmak isteyebilirsiniz:

if ( !($goodObject = ObjectFactory::getObject($objectType)) ) {
  // if $objectType was not something ObjectFactory could handle, it
  // might return a Special Case object such as FalseObject below
  // (see Patterns of Enterprise Application Architecture)
  // in order to indicate something went wrong.
  // (Because it is easy to do it this way.)
  //
  // FalseObject could have methods for displaying error information.
}

Here's a very simple implementation.

class FalseObject {
  public function __toString() {
    // return an empty string that in PHP evaluates to false
    return '';
  }
}

$false = new FalseObject();

if ( $false ) {
  print $false . ' is false.';
} else {
  print $false . ' is true.';
}

print '<br />';

if ( !$false ) {
  print $false . ' is really true.';
} else {
  print $false . ' is really false.';
}

/ / Sadece emin beklenmedik bir şey oluyor yapmak için $ false basmak.

The output is:

is false. is really false.

Ben bu test ettik ve sizin gibi sınıf içinde bazı bildirilen değişkenler, olsa bile çalışır:

class FalseObject {
  const flag = true;
  public $message = 'a message';
  public function __toString() {
    return '';
  }
}


Biraz daha ilginç uygulama olabilir:

class FalseException extends Exception {
  final public function __toString() {
    return '';
  }
}

class CustomException extends FalseException { }

$false = new CustomException('Something went wrong.');

Daha önce olduğu gibi aynı test kodu kullanarak, false false değerlendirir $.