aynı nesne yöntemi kullanarak. Bulduğum bir şey, birden fazla fonksiyon arasında mantığı kopyaladığım.
Basitleştirilmiş örnek:
class Configurable{
protected $configurations = array();
protected static $static_configurations = array();
public function configure($name, $value){
// ...lots of validation logic...
$this->configurations[$name] = $value;
}
public static function static_configure($name, $value){
// ...lots of validation logic (repeated)...
self::$static_configurations[$name] = $value;
}
}
Ben buna bir çözüm bulduk, ama gerçekten kirli hissediyor: Ben boyunca yapılandırmaları ayarlayabilirsiniz böylece
class Configurable{
protected $configurations = array();
protected static $static_configurations = array();
public function configure($name, $value){
// ...lots of validation logic...
if (isset($this)){
$this->configurations[$name] = $value;
}
else{
self::$static_configurations[$name] = $value;
}
}
}
Ben de statik işlev gerekir uygulama. Ayrıca, bu teknikle güzel olan şey, her iki kapsamda da aynı yöntem isimlerini kullanabilmem.
böyle test kapsamı ile herhangi bir sorun var mı? Performans sorunları, ileri uyumluluk sorunları, vb. Her şey benim için PHP 5.2'de çalışıyor ve < 5 desteğine ihtiyacım yok.
Tamam, katı hatadan başka, ikinci yöntemle ilgili herhangi bir sorun var mı? Muhtemelen tavsiyelerinizde bunu değiştireceğim ama bu gibi kodları kullanarak gerçek sorunları anlamak isterim. Gelecekteki PHP sürümlerinden kaldırılması olası bir özellik midir yoksa statik olmayan yöntemleri statik olarak her zaman arayabilecek misiniz? – Rowan
'E_STRICT' hataları," Bu gerçekten kötü bir fikir gibi görünüyor, ancak yine de yapmaya çalışmanıza izin vereceğiz. " Böyle bir şeyin her zaman işe yaracağına dair bir garanti yoktur, ancak muhtemelen tamamen kullanımdan kaldırılmadan önce “E_NOTICE” veya “E_WARN” e dönüştürülecektir. – MightyE
@MightyE – Rowan