Işlevi henüz adı olmuştur olmadığını kontrol edin

5 Cevap php

New to OOP in PHP

Benim işlevlerinden biri çalıştırmadan önce idam edilecek başka bir işlev gerektirir. Ben bu kontrol edebilirsiniz bir yolu var mı?

5 Cevap

Dil-agnostik cevap:

Bir (statik veya global) "devlet" değişken tutmak ve denir önkoşul işlevi içinde bir bayrak. Çalıştırmak için izin verilen karar bağımlı işlevi bayrağı edin.

Eh, kolay çözüm ihtiyacı yöntemini çalıştırmadan önce sadece bu yöntemi çağırmak olacaktır. Eğer yöntemini her zaman çalıştırmak istemiyorum, ama nesnenin bazı dahili durum geçerlidir sadece, yapacağın varsa

class Foo
{
    protected $_someState = 'originalState';

    public function runMeFirst()
    {
        // code ...
        $this->_someState = 'changedState';
    }

    public function someMethod()
    {
        if(!$this->_someState === 'changedState') {
            $this->runMeFirst();
        }
        // other code ...
    }
}

Sürece kontrol denilen ve gereken yöntem ve devlet aramak istediğiniz yöntemi olarak aynı sınıfın içinde olduğu gibi, yukarıdaki muhtemelen en iyi çözümdür. Başka bir yerde önerilen gibi, sınıfta ayrı bir fonksiyonu haline someState için kontrol yapabilir, ama kesinlikle gerekli değil. Ben örneğin, kod tekrarını önlemek için birden fazla yerden durumunu kontrol etmek vardı, ben sadece bunu yapardım üzerinde beyanı ve eğer tekrar aynı yazmak zorunda.

Yöntem çağrısı dışında bir nesne durumuna bağlıdır ise, birkaç seçeneğiniz vardır. Biraz usecase bağlı olarak, bu durumda senaryo hakkında bize daha fazla bilgi verin.

İkinci fonksiyon bu duruma hakkında bilmeniz gereken neden diğer fonksiyon (ilk aranmalıdır biri) bazı devlet manipüle edecek, bu. Bunun için yerleşik bir php bilmem ama ben sonunda bu durumu hakkında bilgi verir başka bir işlevi, örneğin yaratacak isReadyToRunSomething, isValid, hasConnection .. ya da her neyse .. o çalıştırmak için izin olup olmadığını görmek için, ikinci işlevi başında bu işlevi kullanın.

Gözlemci deseninden (olay ne olacak gözlemciler bildirmek yüzden bir şey yapabilirsiniz) istediklerini yapmak için kullanılabilir.

B sonra A çağırır ve üçüncü bir fonksiyonu C oluşturun ve her yerde yeni işlevini kullanın. OOP açısından, A ve B Sınıfında korunmalı ve C kamu, eg sınıfınızı kullanan kim için kullanılabilir.