PHP - parametre olarak uzun sınıf sabitleri kaçınarak

5 Cevap php

Örnek:

class Vendor_ClassName_Helper {
    CONST FIRST_OPTION  = 1;
    CONST SECOND_OPTION = 2;

    public function __construct($option, $otherArgument) {

    }
}

İstemci kodu:

$obj = new Vendor_ClassName_Helper(Vendor_ClassName_Helper::FIRST_OPTION, $var);

Uzun satırları (ve bu oldukça kısa bir örnektir) önlemek için herhangi bir iyi yolu? Belki başka yollar aynı uygulamak için?

5 Cevap

Ben netlik kısa kod daha iyi olduğunu düşünüyorum. Siz, aynı veya farklı bir biçimi ifade farklı kelimelerin düşünmeye deneyebilirsiniz. Omega işaret ve birden fazla satır bölme beyanın onun yöntemi de iyi gibi Örneğin, çok kötü görünmüyor.

Burada başka bir hüner: senin seçenek sabitleri ne bağlı olarak, bunun yerine yeni anahtar kelimenin bir fabrika yöntemini kullanmak isteyebilirsiniz.

Örneğin,

class Example {
    private function __construct() { }

    public static method createA(..) { 
        //configure for mode A
        $cls = new self; 
        return $cls;
    }

    public static method createB(..) { 
        //configure for mode B
        $cls = new self; 
        return $cls;
    }
}

$x = Example::createA();

Ben uzun satırları önlemek ve blok kendi türünün içine parametreleri kırarak çoğu dilde okunabilirliği artırmak ...

$obj = new Vendor_ClassName_Helper(
    Vendor_ClassName_Helper::FIRST_OPTION, 
    $var
);

Ama iki seçenek bence her zaman bunu garanti etmez. Statik sabitleri maalesef gerçekten değiştirilemez ve tabii ki onları tanımlayıcı kalmasını istiyorum.

Burada ne var o kadar kötü değil :)

Eğer kurucusuna sürekli geçen ediyorsanız, bunun yerine alt sınıflarının oluşturulması gerektiğini öneririm:

class Vendor_ClassName_Helper {
  public function __construct($otherArgument) {
  }
}

class Vendor_ClassName_Helper_First extends Vendor_ClassName_Helper {
}

class Vendor_ClassName_Helper_Second extends Vendor_ClassName_Helper {
}

sınıf veya sabitin isimleri (and making your code impossible to understand, which is something you definitly don't want) için kısa adını kullanmadan, hayır, ben bir yol olduğunu sanmıyorum - en azından, değil PHP < 5.3

PHP 5.3 PHP ad ekler; olanlar ile, daha kısa / daha iyi bir şey gelmek mümkün olabilir; ama ... (5.3.0, bu yıl Haziran sonunda açıklaması oldu, bu yüzden averywhere mevcut bulunuyor önce bir süre olabilir) birçok hosting şirketleri tarafından önerilmiştir değil PHP 5.3, kullanmak demektir

PHP ad alanları hakkında daha fazla bilgi almak için (and to cite only a couple of links):

Ben daha iyi bir şekilde (dinamik bir yolu yok) yok olduğunu düşünüyorum:

class LongClassName
{
    const B = 3;
}

class LCN
{
    const B = LongClassName::B;
}

echo LCN::B;