Sürüm 5.3 ile başlayarak, statik yöntemler için PHP destekler late binding. Bir kuşkusuz yararlı bir özellik olsa da, kullanımı gerçekten gerekli olup, sadece birkaç vaka (örneğin Active Record desen) vardır.
Bu örnekleri göz önünde bulundurun:
1. Convenience constructors (::create()
) strong>
class SimpleObject
{
public function __construct() { /* ... */ }
public static function create()
{
return new static; // or: return new self;
}
}
Bu sınıf uzayabilir, (ancak, aynı paket içinde herhangi bir sınıf tarafından genişletilmiş değil) geç statik sadece, ::create()
yöntemini yeniden yazmak zorunda kalmadan (daha kolay uzanan, ve yapmak için kullanılan bağlama gerektiğini daha da önemlisi,) bunu yapmak için hatırlamak zorunda kalmadan?
Note: this idiom is used to work around the impossibility to call methods on just constructed objects: new SimpleObject()->doStuff()
PHP geçersiz. Em>
2. Class constants
class TagMatcher
{
const TAG_PATTERN = '/\<([a-z\-]+?)\>/i';
private $subject;
public function construct($subject) { $this->subject = $subject; }
public function getAllTags()
{
$pattern = static::TAG_PATTERN;
preg_match_all($pattern, $this->subject);
return $pattern[1];
}
}
Bu örnekte, static::
kullanımı nedeni bir öncekine benzer. Bu sınıf sadece uzanan ve sabit kılarak farklı oluşturduğu etiketleri maç yapılabilir çünkü sadece kullanılır.
Yani, tüm kadar tamamlamayı, bağlama geç statik bu kullanımları (ve benzer olanlar) bir overkill vardır? Herhangi bir fark performans bulunanlar var mı? Ayrıca, geç bağlama sık kullanımı opcode önbelleklerini tarafından verilen genel bir performans artışı azaltır mı?