Seperti disebutkan di atas, Anda tidak akan dapat melewati parameter. Saya telah menulis jawaban ini untuk memberikan beberapa tambahan, yang terlalu besar untuk dimasukkan dalam komentar.
@Frank Nocke mengusulkan untuk memanggil fungsi dengan parameter defaultnya, jadi misalnya memiliki
function a($b=0, $c=NULL, $d=''){ //...
kamu harus menggunakan
$var = a(0, NULL, 'ddd');
yang secara fungsional akan sama dengan menghilangkan dua parameter ( $b
dan $c
) pertama.
Tidak jelas mana yang default ( 0
diketik untuk memberikan nilai default, atau penting?).
Ada juga bahaya bahwa masalah nilai default terhubung ke fungsi eksternal (atau built-in), ketika nilai default dapat diubah oleh pembuat fungsi (atau metode). Jadi jika Anda tidak ingin mengubah panggilan Anda dalam program ini, Anda dapat secara tidak sengaja mengubah perilakunya.
Beberapa solusi mungkin untuk menentukan beberapa konstanta global, seperti DEFAULT_A_B
yang akan menjadi "nilai default parameter B dari fungsi A" dan parameter "menghilangkan" dengan cara ini:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
Untuk kelas, akan lebih mudah dan elegan jika Anda mendefinisikan konstanta kelas, karena mereka adalah bagian dari cakupan global, mis.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
// method body
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.
Perhatikan bahwa konstanta default ini didefinisikan tepat satu kali di seluruh kode (bahkan tidak ada nilai dalam deklarasi metode), jadi jika terjadi beberapa perubahan yang tidak terduga, Anda akan selalu menyediakan fungsi / metode dengan nilai default yang benar.
Kejelasan dari solusi ini tentu saja lebih baik daripada memberikan nilai default mentah (seperti NULL
, 0
dll.) Yang tidak mengatakan apa-apa kepada pembaca.
(Saya setuju bahwa menelepon seperti $var = a(,,'ddd');
akan menjadi pilihan terbaik)