Saya telah melalui beberapa fungsi PHP dan saya tidak dapat melihat hal-hal berikut:
<?php
function foo(&$var) { }
foo($a); // $a is "created" and assigned to null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
Perhatikan array_key_exists()
dan property_exists()
fungsinya. Dalam yang pertama, nama properti (kunci untuk array) adalah parameter pertama sedangkan yang kedua adalah parameter kedua. Dengan intuisi, orang akan mengharapkan mereka memiliki tanda tangan yang serupa. Hal ini dapat menyebabkan kebingungan dan waktu pengembangan dapat terbuang dengan melakukan koreksi jenis ini.
Bukankah seharusnya PHP, atau bahasa apa pun dalam hal ini, mempertimbangkan untuk membuat tanda tangan dari fungsi terkait konsisten?
Jawaban:
Apa yang Anda usulkan pada dasarnya adalah mengubah tanda tangan ke banyak fungsi yang ada. Pikirkan sejenak apa efek yang akan terjadi pada kode yang ada. Sekarang anggaplah kelompok PHP telah merilis versi PHP N yang mengubah tanda tangan 30% dari fungsi. Sekarang bayangkan Anda harus menulis kode yang berjalan di PHP vN dan PHP v. {N-1} - seberapa menyenangkan hal itu?
Sekarang bayangkan Anda adalah manajer pusat data perusahaan atau hoster - insentif apa yang Anda miliki untuk mendukung PHP vN, asalkan setelah Anda beralih, semua kode akan rusak dan pengguna akan datang ke kantor Anda dengan garpu rumput dan obor?
sumber
Karena PHP adalah Bahasa Tanpa Spesifikasi Apa Pun.
Dan secara harfiah setiap orang dapat menambahkan beberapa fungsi, dan tidak ada pertanyaan tentang konsistensi pada awalnya. JADI, kekacauan.
sumber
Sebagian besar bahasa yang baik adalah dan berusaha untuk konsisten.
Itu hanya realitas keadaan PHP. Seperti yang disebutkan oleh StasM, akan menjadi mimpi buruk untuk mencoba dan mengubah hal-hal seperti itu setelah fakta. Itu akan mempengaruhi terlalu banyak kode yang ada. Seringkali PHP hanya mencela fungsi dan membuat fungsi baru yang lebih baik yang lebih konsisten, tetapi itu bisa memakan banyak waktu.
Saya pikir pemrogram PHP yang sukses baik mengingat sintaks tertentu atau menggunakan perangkat lunak yang secara otomatis memberi tahu mereka sintaks.
sumber
foo(a,b)
saat ini seharusnyafoo(b,a)
karena seseorang mengubah tanda tangan foo.$array->key_exists('whatever')
tetapi, meh :-)Sumber utama ketidakkonsistenan adalah banyak (sebagian?) Php dalam fungsi-fungsi bawaan benar-benar dibungkus dengan beberapa pustaka C. Pemikiran awal adalah "Saya membungkus fungsi C xxxx karena itu saya harus menjaga agar parameter tetap sama". Ketika datang untuk menulis "php murni" fungsi pemikiran ini diperluas ke "xxxx mengambil file dan opsi fungsi baru mengambil nama file dan opsi sehingga masuk akal untuk mengambil parameter yang sama dalam urutan yang sama.
Kelemahan besar di sini adalah bahwa pustaka C yang mendasarinya sangat tidak konsisten untuk memulai.
sumber
Alasan (a?) Adalah untuk tetap kompatibel dengan versi PHP sebelumnya. Alih-alih mengubah nama fungsi yang akan merusak banyak aplikasi, fungsi tetap. Namun, dengan intuisi, ya penamaan fungsi yang konsisten harus dipertimbangkan untuk bahasa baru.
Saya harus tidak setuju dengan Anda pada kenyataan waktu pengembangan terbuang. Mempelajari PHP mungkin membutuhkan waktu lebih lama untuk memahami penamaan fungsi-fungsi tertentu, tetapi begitu dikuasai (atau setidaknya disadari) itu menjadi masalah.
Kompatibilitas> Konsistensi (setidaknya ke PHP)
sumber