Daha önce kendimle bu tür bir felsefi tartışma yaşadım. Bunun görüşe dayalı bir cevap olduğunu fark etsem de çoğu zaman burada duruyorum:
Soruyu cevaplamaya yardımcı olabilecek bir şey, ayarlanmış öznitelikler / dizi üyeleri olabilir veya olmayabilir $ params geçirilmesi olduğunu.
Yıllar boyunca bu sonuca geldim:
Dizilerin geçişinden kaçının.
Neden? İsteğe bağlı geçirilen bağımsız değişkenler için sentinel değerlerini tanımlamanın veya tanımlamanın bir yolu yoktur.
Başka bir deyişle, belirttiğiniz kodla, böyle bir şey yapamazsınız:
function __construct($arg1 = NULL, $arg2 = DEFAULT_VAL) {
$this->arg1 = $arg1;
$this->arg2 = $arg2;
}
$ arg1 ve $ arg2 isteğe bağlı bağımsız değişkenlerdir - geçilmediyse sırasıyla NULL ve DEFAULT_VAL değerlerine sahiptir - açıkça kontrol etmeye gerek yoktur.
Belki de bu biraz keyfi gibi görünüyor.
Sanırım başarmaya çalıştığın şeyi elde ediyorum - tonlarca tartışmanın aksine tek bir referansın geçmesi. Bu beni bir sonraki sonuca getiriyor:
"Atomik" değişkenleri (dizeler, tamsayılar, değişmez değerler) geçirmezseniz, nesneleri geçirin.
Burada geçen nesnelere referansla yapıldığı için performans faydaları vardır (diziler kabaca PHP içinde aynı olsa da).
Yani şöyle bir şey yapabilirsiniz:
function __construct(MyAwesomeObject $oArg) {
$this->oArg = $oArg;
}
Bu durumda, iletilen nesne bağımsız değişkeninin, muhtemelen varsayılan değerlerin kendileri de olsa "property1", "property2" olduğu garanti edilir.
Ayrıca, burada ipucu yazabilirsiniz ve iyi bir IDE de kod tamamlamayı doğru şekilde otomatik olarak önerecektir.
Ama çabucak bir tavuk ve yumurta şeyimiz olduğunu fark ediyoruz: bir noktada kendilerinin inşa etmesi gereken, geçmiş nesne argümanlarıyla bir nesne inşa ediyorsunuz.
Peki bu bizi nereye bırakıyor? Sonuçta, tüm sınıfların daha iyi bir terim olmamasından ötürü "atom" değişkenlerine (dizeler, yüzen, iki katına, ints, ne demek istediğimi anladığına) damladığı ve denemeye meyilli olduğum sonucuna vardım. bu değişken türleri veya nesnelerle tüm sınıfları oluşturmak - ancak dizileri değil.
Soruna cevap verdim mi? muhtemelen tam olarak değil. Ama umarım biraz üslup da olsa yararlı bir şey gösterdim. Kodun biraz daha temiz, daha okunabilir ve daha az maliyetli olduğunu düşünüyorum.
Şimdi, bu, girdilerinizi sterilize etmemeniz gerektiği anlamına gelmiyor. Bu tamamen başka bir tartışma.
Bu yardımcı olur umarım.
new object($param1,-some default value so I can specify the next parameter-, $param3);
ve böylece varsayılan değerleriniz birkaç farklı yerde sabit kodlanmış olur