"Tesadüfi fayda fonksiyonları" Elegant uygulamalar

5 Cevap php

Nasıl tüm OOP sınıflar (küresel işlevler) dışında bir dilin işlevselliğini artırmak için rasgele fonksiyonları organize?

Ben kütüphaneler gördüm, ama yeterli fonksiyonları yok, özellikle eğer ben hala, bu iyi bir çözüm olarak satılan değilim. Ben insanların rastgele PHP ve JavaScript işlevlerini nasıl organize özellikle ilgileniyorum.

5 Cevap

Ben tamamen genel ad olarak ilan fonksiyonlarını önlemek için deneyin. Örneğin, PHP benim sürümü olmayan fonksiyonların userland uygulamaları eklerken ben bunu çok nadir durumlarda, bir

if(false === function_exists('lcfirst'))
{
    function lcfirst( $str ) { /* ... */}
}

Bu gibi işlevler bir önyükleme dosyasına dahil olacak bir compatibility.php gidebiliriz, onlar function_exists Ben sorunları çalıştırmak emin yapar uygulama ve kontrol genelinde mevcuttur PHP sürüm kez fonksiyonu için yerel destek var.

Diğer tüm fonksiyonlar için, ben onlar ilk özel bir nesne üzerine gidemez olup olmadığını görmek için denemek istiyorum. Genellikle, "rastgele" fonksiyonları sadece yanlış vardır. Lütfen programı işlevleri kullanmak ve daha sonra orada yöntemleri taşıyabilirsiniz olup olmadığını görmek hangi nesneleri bakabilirsiniz. Belki çıkmak için bekleyen bir üst sınıf var. Ayrıca bkz: Information Expert pattern.

Hiçbir nesne yoksa bu yöntemler benzersiz bir ad ad Utils ile bir statik modülü, sen yine grup onlara gidebilir, bu yüzden küresel ad kaplamak yok. Bu şekilde, size global kapsamda diğer üçüncü taraf fonksiyonları ile çatışan değil emin olabilirsiniz.

Önce 5.3, ben modül olsaydı onları following the PEAR naming convention ve klasör yapısı aşağıdaki sınıf isimlerini önek, örneğin, com/mattmueller/utils.php, kullanmak istediğiniz grubu olur

class Com_MattMueller_Utils
{
     public static function something($a, $b) { /* ... */ }
}

PHP5.3 itibariyle, gerçek namespaces var ve siz yapabilirsiniz

namespace com\mattmueller\Utils;

class Utils
{
    public static function something($a, $b) { /* ... */ }
}

Javascript Eğer ad olabilir ama easily simulate them, örneğin, bir nesneye işlevleri ekleyerek yok

// JavaScript
var com = (com) ? com : {};
com.mattmueller = {
    'Utils': {
        'something' : function(a,b) { /* ... */ }
     }
};

Ortak çerçeveler genellikle de creating namespaces için işlevleri uygulamak.

Ben genellikle ideal ilk etapta PHP olmalıydı benim garip tüm fonksiyonları için bir functions.php veya common.php saklıdır. (Hiç belirli projeme, Anlamı).

Bu standart bir işlev çok-boyutlu diziler, ya da bu kategoride uyuyor başka bir şey uzatmak yapmak gibi bir şey olabilir.

Ben değişim projeleri zaman, ben sadece bir sonraki proje için bu dosyayı üzerine kopyalamak ve her yerde kolayca benimle gidebilirsiniz. Sonra ben sadece emin benim yük komut yüklü olduğundan emin olun, ve başarıyla dili artırdık.


Proje belirli şeyler için, ben projeye özel, aynı zamanda, olan gerçekten garip işlev çağrıları içeren bir Misc sınıf tutmak.


Javascript işlevleri için, ben aynı şeyi uygulayabilirsiniz hayal edebiliyorum. Bir functions.js veya global.js yazmanız dosyası oluşturmak isterseniz, muhtemelen aynı mantığı kullanabilirsiniz.

Ben bütün non-NYP koyabilirsiniz nereye daima LOL, bir yardımcı sınıf kullanın. Ben hala OO olmanın yardımcıları propourse olduğu anlamına ve diferent yardımcıları da işlevlerini organize edebilirsiniz avantajı ile yerine yöntemleri fonksiyonlar var. Vb StringHelper, DBHelper gibi,

Javascript için, ben ilk tercihi jQuery içine benim programları entegre olması gerektiğini buldum. Bu işlev başka tür yazma olarak kolay, ve işler daha karmaşık olsun zaman (sitede ve tüm diğer sayfa özgü kod üzerinde) jQuery her şeyin üzerinde dayatır paradigma kaldıraç edebilmek için harika.

JavaScript, bir nesnenin altında yeni bir dosya ve bir grup bunları yapmak

global.js:

/* Function definitions */ 
var myFunctions = new Object();
myFunctions.func = function () {
   alert("hello"); 
}

Aynı fikir PHP için kullanılabilir. Bu ile, program büyüdükçe zaman adlandırma çatışmalar hakkında endişelenmenize gerek yoktur.