Iyi bir fikir ve php sürüm numarası üzerinde şube güvenilir midir?

3 Cevap php

Ben bir gettext uygulanması için benim çerçevesinde bazı yeni parçaları üzerinde çalışıyorum. Bu ölü PHP4 ve PHP5 + desteklemesi gerekir. Ben Zend_Translate kullanıyorum ve php4 için bir gettext tabanlı sınıfı uygulamak olacaktır.

Bunu uygulamak için hangi sınıf şube phpversion işlevi güvenmek ok merak ediyorum. Gibi bir şey ...

$version = phpversion();
define('VERSION', grabVersion($version) ); // grab major version

if ( VERSION >= 5 ) {
   $local = new Zend_Translate();
} else {
   $local = new Gettext();
}

Hem sınıflar çeviriler yapmak için _ fonksiyonu var, bu yüzden geri kalan aynı olmalıdır.

<label for="first_name"><?php echo $local->_("First Name");?></label>

Eğer ölü PHP4 desteklemek zorunda olsaydı benzer bir şey yapacağını, büyük php çerçeveler herhangi bunu yaygın mıdır?

3 Cevap

Ben PHP sürümleri arasında bu uygulamaya gidiyordu, ben de sürüm numarası itimat ederdi. Peki önerdiğin mükemmel aklı başında ve kabul edilebilir görünüyor.

Bu bir php sürüm numarasına şube için korkunç bir fikir değil, ama böyle bir şey tercih ediyorum:

if(class_exists("Zend_Translate")) {
   $local = new Zend_Translate();
} else if(class_exists("Gettext")) {
   $local = new Gettext();
} else {
   throw new Exception("No supported translation helper found");
}

Eğer istiyorsa, bunu daha dinamik yapabilir:

$translators = array(
    "Zend_Translate",
    "Gettext",
    "FooTranslate",
);
$local = null;

foreach($translators as $t) {
    if(class_exists($t)) {
        $local = new $t();
        break;
    }
}

if($local === null) {
    throw new Exception("No supported translation helper found");
}

Sürümüne göre şube için daha iyi bir yer, hata işleme - Ben PHP4 bulunmayan durumlar, kullanmak yukarıda :)

Ben sürüm numarasını almak iyi bir fikir olduğunu düşünüyorum, ama bu mavi seslendi değil bu yüzden örtülü olmalıdır.

$local = TranslateFactory::create();
$local->_("translate me");

class TranslateFactory {
	private static $_translator;	
	private static function _getTranslator() {
		if(empty(self::$_translator)) {
			// get php version
			// if-case here
			self::$_translator = // result your if-case
		}
		return self::$_translator;
	}
	public static function create() {
		return _getTranslator();
	}
}

Yani en azından bir istek başına önbellek sağlar. Eğer sadece gerçek nesne getiriliyor ki bir noktada mantığı koyarak, gerek olsaydın _getTranslator(), hatta daha uzun süreli bir önbellek nesnesi almak olabilir.