Bu is_null gerçek bir sınıf getiri elde etmek mümkün mü?

2 Cevap php

SQL sorguları LazyLoading için bir proxy desen sınıfın çeşit inşa ediyorum.

Proxy deseni nesnesindeki aramaları geçişi için __call, __get ve __set kullanır, ancak SQL herhangi bir satır dönmedikleri takdirde bazen hiçbir nesne yoktur.

Benim soru i vekil sınıf bir is_null() yaparsanız, o zaman sınıf getirisini true yapmak mümkün, daha sonra? Ben count() olarak sınıf iş yapar sayılabilen gibi uygulayabilirsiniz herhangi SPL arabirimi yoktur düşünüyorum.

Herhangi bir öneriniz?

2 Cevap

Ne yazık ki, bu ben doğru dönmek is_null geçirilen bir nesne için korkuyorum mümkün değildir. Bazı alternatif olabilir:

  1. Use NullObjects, an interesting discussion on these can be found recently on sitepoint http://www.sitepoint.com/forums/showthread.php?t=630292

  2. Bu durumda mümkün olmayabilir, ancak aslında bir nesne yerine boş dönmek.

Bu herhangi bir yardım olup olmadığını bilmiyorum ama __ toString yöntemi yararlanarak olası aradığınız ne elde edebiliriz, ancak uyarılmak, bu hiç de temiz kod değildir ya da en iyi uygulama, Rob önerilen çözüm aslında daha iyi

Siz PHP5.2 veya daha yüksek kullanarak gereken ve tiplemeleri yararlanmak ve PHP'nin sınıf modelinin __ toString sihirli yöntem

class Dummy 
{
	private $value;

	public function __construct($val)
	{
		$this->value = $val;
	}

	public function __toString()
	{
		return $this->value;
	}
}

$dummy = new Dummy('1');
if((string)$dummy) {
	echo "__toString evaluated as true".PHP_EOL;
} else {
	echo "__toString evaluated as false".PHP_EOL;
}

$dummy2 = new Dummy('0');
if((string)$dummy2) {
	echo "__toString evaluated as true".PHP_EOL;
} else {
	echo "__toString evaluated as false".PHP_EOL;
}

Burada ne olur __ toString yöntemi dize 0 veya dize 1 (dikkat, tamsayılar dönmek dizeleri dönmek yok!) Ya döndürür

'0 'Için yanlış değerlendirir, '1' çok durumda da yardımcı olabilir böylece if ifadesi true değerlendirir.