Bunu gözlemciden sonra $ döndürüyor


27

İnternette ve 3. parti modüllerde bazı çelişkili bilgiler görüyorum - $thisgözlemci yönteminin sonunda geri dönmek zorunlu mu yoksa en iyi uygulama mı?

Örneğin:

MyCompany_Module_Model_Observer.php

public function salesOrderSaveAfter($observer){
    //do stuff
    return $this;
}

Yanıtlar:


30

Çekirdek her zaman return $this;gözlemci yöntemleri bağlamında - ancak aslında bunun bir nedeni görünmüyor.

Geriye dönüp dispatchEvent()bakıldığında, gözlemci yöntemlerini çağıran ana yöntemi bulacaksınız (in ./app/Core/Model/App.php)

protected function _callObserverMethod($object, $method, $observer)
{
    if (method_exists($object, $method)) {
        $object->$method($observer);
    } elseif (Mage::getIsDeveloperMode()) {
        Mage::throwException('Method "'.$method.'" is not defined in "'.get_class($object).'"');
    }
    return $this;
}

Ancak hiçbir noktada, zincirdeki bir başka gözlemciye iletilmek için gerçekte hiç kullanılmamış veya referans gösterilmemiştir.

Belki de Magento, onu $thisoturum / kayıt defteri kullanmak dışında sınıf içinde verileri tutmak / iletmek için bir araç olarak kullanmak için daha uzun vadeli düşünüyordu ; ya da sadece sıkışmış eski kod olabilirdi .

Zorlayıcı bir neden göremiyorum return $this- ama söyleniyor, eğer çekirdek içinde yaparlarsa, biz de öyle yaparız.

Genel bir kural olarak, çekirdek ne yaparsa yapsın - biz en iyi uygulamayı kabul ediyoruz. Şok edici heceleme hataları hariç :)


6
"Ukringlish" :-)
benmarks,

Kullanılmayan parametrenin IDE uyarısından kurtulmak için bazen $ gözlemciyi iade ettiğimi kabul etmekten utanıyorum ...
Daniel Sloof

@Daniel - sadece gözlemcinin imzasına param ekleme. PHP umursamıyor. Fakat sonra tekrar, geçen param gelecekte gerekli olabilir.
nevvermind

7

Bu $ (amaçlanan) akıcı bir arayüz denir. Tanımlanmış bir değişkene başvurmadan, bir nesnede birden çok yöntemi çağırmanıza olanak tanır.


1
Teşekkür ederim - akıcı arayüzleri anlıyorum. $thisGözlemcilerde akıcı arayüzler gerçekten kullanılmadığında geri dönmek için zorlayıcı bir sebep arıyorum .
Philwinkle

1
@Kevin - Mage'nin gözlemcilerinde akıcı bir arayüze ihtiyacınız yok. Bildiğim kadarıyla hayır.
Nevvermind

5

Bir yöntemin başka bir dönüş değeri yoksa, aslında herhangi bir yerde akıcı bir arayüz için kullanılmasına veya kullanılmamasına bakılmaksızın (hiçbir şey) $thisyerine her zaman geri dönmek yalnızca bir Magento sözleşmesidir void.

Bunun avantajı, faydalı olup olmadığını düşünmenize gerek olmaması ve gereksiz bir akıcı arayüzün eksik olandan daha iyidir. Ayrıca, Magento olabilir bu son derece düşüktür rağmen gözlemciler için bunları kullanmaya başlayın.


0

Birkaç yıl sonra ... :)

Çekirdek her zaman $ döndürür; gözlemci yöntemleri bağlamında - [...]

veya

Bir yöntemin başka bir geri dönüş değeri yoksa, sadece boş (yerine hiçbir şey) yerine $ $ döndüren bir Magento sözleşmesidir [...]

Hayır gerçekten. 1.9.3.x'deki bazı gözlemcileri kontrol ettim ve çoğu hiçbir şey döndürmedi ( void). Bu yüzden aslında "çekirdek kodun ne yaptığı" tam olarak belli değil;)

Ben de kodumda kullandım $return $this;, ancak bugün - M1 kodunda hiçbir değişiklik olmayacak - bıraktım. Sanırım - başkalarının kodunu okursam - bir voidyöntem daha net gözüküyor return $this, sonra kör bir şekilde eklenmiş , hiç kullanılmamış.


Düzenle:

Aoe_Scheduler kullanıyorsanız, a stringveya geri arraycron geçmişinde görüntülemek için de geri dönebilirsiniz .

görüntü tanımını buraya girin

Bu özellikler için herhangi bir dokümanı bulamadım ... ilgili kod burada: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229- L259

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.