Karena ini musim liburan sekarang dan semua orang berharap, saya bertanya-tanya - fitur bahasa apa yang ingin ditambahkan PHP? Saya tertarik pada beberapa saran / keinginan praktis untuk bahasa ini. Secara praktis yang saya maksud:
- Sesuatu yang dapat dilakukan secara praktis (bukan: "Saya berharap PHP akan menebak apa arti kode saya dan memperbaiki bug untuk saya" atau "Saya berharap kode apa pun akan dijalankan di bawah 5ms")
- Sesuatu yang tidak perlu mengubah PHP ke bahasa lain (bukan: "Saya berharap mereka akan menjatuhkan tanda $ dan menggunakan spasi alih-alih kawat gigi" atau "Saya berharap PHP dikompilasi, diketik secara statis dan memiliki # di namanya")
- Sesuatu yang tidak perlu melanggar semua kode yang ada (tidak: "Mari kita ganti nama 500 fungsi dan ubah urutan parameter untuk mereka")
- Sesuatu yang tidak mengubah bahasa atau beberapa aspek menarik dari itu (tidak: "Saya berharap ada ekstensi untuk mendukung protokol XYZ" atau "Saya berharap bug # 12345 akhirnya tetap")
- Sesuatu yang lebih dari kata-kata kasar (tidak: "Saya berharap PHP tidak akan terlalu buruk")
Adakah yang punya keinginan baik?
Edit mod: Stanislav Malyshev adalah pengembang PHP inti.
Jawaban:
Saya tidak akan keberatan menyebutkan parameter.
Sayangnya para pengembang PHP telah menghapus ide itu .
sumber
[]
operator JavaScript ) akan menjadi fitur yang dihargai.Lebih banyak referensi:
Yang lain menyebutkan parameter bernama, dan sintaks array lebih pendek. Saya tidak akan keberatan sintaks objek lebih pendek, juga.
sumber
function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
()->
sintaks adalah, bahwa itu hanya bekerja ketika suatu objek dikembalikan, untuk membuat keadaan menjadi lebih buruk, objek tersebut bahkan diperlukan memiliki properti / metode dari nama yang ditentukan, yang, secara optimal, melakukan apa yang Anda harapkan , sambil menerima parameter yang Anda berikan, dan berdoa agar itu tidak memerlukan lagi ... dll dll.Setelah bekerja dengan PHP selama sekitar 13 tahun, dan banyak dengan JS selama sekitar 4 tahun, ada beberapa hal yang menurut saya sebaiknya dipinjam dari JS:
1) notasi singkatan untuk Array dan Objek. Saya percaya ini mungkin telah dibahas dan ditembak jatuh pada internal (jadi saya dengar - saya tidak suka melihat bagaimana sosis dibuat), tapi saya benar-benar menemukan bahwa notasi literal untuk array dan objek di JS adalah besar menang produktivitas.
Sebagai contoh:
Apakah (IMHO) lebih mudah untuk menulis dan bersih daripada
Saya pernah mendengar bahwa beberapa kekhawatiran tentang potensi kebingungan muncul, tetapi sungguh, apakah ini lebih membingungkan daripada, katakanlah, notasi heredoc? Paling tidak, membuat objek stdClass di PHP cukup bertele-tele untuk mencegah praktik, saya pikir.
2) Mampu mendefinisikan kembali fungsi dan metode yang didefinisikan sebelumnya akan sangat berguna. Ini akan menyederhanakan situasi khusus memperluas kelas dan instantiating kelas baru terlalu rumit atau tidak praktis. Saya pikir kita harus menghindari redefinisi fungsi dan metode inti / non-userspace.
Selain keduanya, saya pikir PHP harus mendukung unicode secara transparan . Ini semakin menjadi masalah bagi pengembang, dan solusi yang saat ini ditawarkan dalam PHP membingungkan dan seringkali tidak berkinerja. Membuat semua fungsionalitas string standar ramah-kode keluar dari kotak akan menjadi kemenangan besar bagi programmer PHP.
Terima kasih untuk bertanya!
sumber
Hal-hal yang saya inginkan, sebagai mantan pembela PHP lama:
some_array_method($argity, array('key' => $value));
. Sayangnya, saya yakin proposal ini sudah dihancurkan pada milis PHP.finally
dukungAuthorizeAttribute
yang akan menunjukkan bahwa suatu pengontrol atau metode tindakan mengharuskan pengguna untuk diotorisasi. Kerangka itu sendiri akan bertanggung jawab untuk mencari atribut dan bertindak sesuai dengannya. Saya percaya PHPUnit sudah menggunakan semacam atribut dengan meletakkannya di komentar docblock, yang dapat dibaca menggunakan refleksi, tetapi menempatkan fungsionalitas aktual dalam komentar docblock tentu saja merupakan peretasan.function($x){ return $x*2;}
, mungkin saya bisa menulis$x => return $x*2
, atau sesuatu. Lagi-lagi ini adalah sesuatu yang membuatnya sulit untuk menggunakan fitur ini. Sebagai contoh$results = array_filter(array(1,2,3), function($a) { return $a % 2; }):
vs$results = array_filter(array(1,2,3), $a => return $a % 2 );
Mantan hanya memiliki jauh lebih banyak pipa yang pada dasarnya tidak relevan dengan pekerjaan yang sebenarnya Anda coba capai.Decimal
(fixed-point math) yang mendukung operasi matematika melalui operator normal akan lebih baik, karena kami tidak memiliki operator yang kelebihan beban.sumber
Jadikan PHP benar-benar berorientasi objek. The
slap on another global function
evolusi PHP perlu untuk mengakhiri.Ini sulit bagi saya untuk membaca. Saya harus membuat tumpukan mental saya sendiri dan mengompilasinya sendiri. Pada dasarnya harus dibaca secara terbalik.
$dog->wakeup()->bark();
mudah dibaca dibandingkan denganbark(wakeup($dog))
Anda telah membuat langkah untuk mengaktifkan dukungan objek / metode sekarang, silakan gunakan dalam fungsi inti PHP yang sebenarnya.
Mengubah fungsi ini ke metode akan memungkinkan mereka untuk diganti namanya menggunakan beberapa secara konsisten. Apakah akan merusak kompatibilitas ke belakang jika string dan array memiliki metode mereka sendiri?
sumber
dog_wake_up($dog); bark_dog($dog);
Mesin permintaan bahasa yang terintegrasi akan sangat bagus. Agak seperti apa yang tersedia di. NET disebut LINQ. Ini akan membantu memilah-milah array data yang besar, dan membakukan akses basis data, sehingga lebih sedikit serangan injeksi SQL berhasil.
sumber
Oh Ketik mengisyaratkan untuk primitif. Itu akan menyenangkan.
sumber
Saya sangat mengharapkan dukungan unicode yang lebih baik. Sebagian besar bahasa bergerak ke arah itu tetapi PHP masih memiliki perintah aneh yang berserakan di mana-mana.
http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/
sumber
Buat objek string seperti, dengan metode bawaan untuk mengganti yang non-objek yang dinamai dan parameter. misalnya
dll.
Sunting: satu hal lagi: Metode ini harus selalu mengharapkan dan memancarkan UTF-8, kecuali untuk yang secara khusus dimaksudkan untuk menangani penyandian. Jika input tidak valid UTF-8, pengecualian harus dilemparkan, bahkan jika output dari fungsi tidak akan terpengaruh oleh pengkodean.
sumber
subject->verb(object)
, membuat urutan parameter lebih mudah diingat.is_object($string)
kembali? Ini akan merusak kompatibilitas ke belakang, atau menghasilkan pengenalan objek yang hampir tidak intuitif, tetapi tidak cukup.1) Saya akan senang jika objek yang baru instantiated mengembalikan "$ this" sehingga saya dapat menggunakan metode chain, $ user = Pengguna baru ('john') -> setLastName ('Doe') -> save ();
2) Jika Anda pernah menggunakan ruby, dan simpul terbaru, mereka memiliki shell interaktif yang hebat (IRB). Saya ingin PHP memiliki yang benar-benar bermanfaat.
3) Ciri-ciri / Mixin, tapi saya dengar mereka ada di jalan.
4) Saya ingin kedua array pendek $ myArray = ['my', 'array'];
5) Penamaan / pesanan yang konsisten (yaitu tumpukan jerami jarum)
sumber
create()
metode yang tidak melakukan hal khusus hanya untuk mengatasi # 1!1) harap sertakan include (). Referensi ke file lain harus menjadi referensi, dan tidak benar-benar menempatkan konten dari satu file kode sumber ke yang lain. Terlalu banyak pemrogram PHP menggunakan termasuk () sebagai jenis panggilan fungsi daripada sarana untuk referensi perpustakaan. Ini menyebabkan semua jenis ambiguitas dalam keadaan variabel dan kode tidak stabil. Ganti ini dengan perintah 'gunakan' seperti Perl.
2) mohon berikan metode out of the box untuk mengkompilasi aplikasi PHP ke dalam file bytecode yang dapat didistribusikan atau dieksekusi. Ini akan sangat meningkatkan daya tarik PHP sebagai bahasa pengembangan komersial. Ini harus menjadi komponen dasar bahasa. Jangan khawatir tentang file html yang digunakan untuk GUI aplikasi karena ...
3) tolong singkirkan kemampuan untuk menanamkan tag PHP ke dalam HTML. Atau setidaknya menyediakan mode 'tanpa embed'. Ini adalah kekacauan mutlak dan mendorong desain yang buruk dengan menggabungkan logika aplikasi dan presentasi bersama. Pengembang harus menggunakan templat untuk tampilan dan tidak menampar file PHP bersama dan berharap yang terbaik.
Tertanda,
GrandmasterB
ps: jangan dengarkan apa yang orang lain katakan, saya baik-baik saja sepanjang tahun
sumber
Arahan ini untuk
E_ERROR
pada konstanta yang tidak terdefinisi, daripada menganggap itu adalah string denganE_NOTICE
.sumber
E_ERROR
atauE_PARSE
.Normalisasikan namespace global dengan konvensi penamaan yang dipikirkan dengan matang yang masuk akal bagi pendatang baru!
Mengutip Jeff Atwood yang kami cintai: PHP payah tetapi tidak masalah !
sumber
String harus berupa objek
sumber
1) Sintaks array / objek yang lebih pendek, ala JavaScript (seperti yang disebutkan sebelumnya)
2) Izinkan
const
variabel untuk memungkinkan hasil perhitungan sepertidefine()
halnya.3) Rantai langsung dari konstruktor:
new User()->name('Ryan');
4) Array dereferencing:
something_that_returns_array()[4];
5) Dukungan SPL yang diperluas. SPL melakukan pekerjaan yang layak untuk menata kembali fungsi string dan array (antara lain) sebagai objek. Memperluas SPL bisa mengatasi banyak keluhan tentang bahasa yang begitu janky.
6) Menggunakan
ArrayObject()
harus setransparan menggunakanarray()
. Anda harus dapat melakukan hal-hal sepertiarray_filter($array_object_instance)
tanpa melakukanarray_filter($array_object_instance->getArrayCopy())
. Bahkan lebih baik, tentu saja$array_object_instance->filter()
.7) Unicode penuh akan menyenangkan.
8) Berhenti melakukan konversi tipe otomatis yang aneh. Misalnya, Anda tidak boleh dapat
echo
objek SimpleXMLElement tanpa terlebih dahulu mengetikkannya sebagai string. Atau setidaknya, melempar sesuatu ketika itu terjadi (misalnya, dalam mode ketat, atau mode apa punerror_reporting(-1)
itu).9) Dukungan untuk beberapa utas, atau semacam callback yang terjadi / tidak sinkron. Ini paling penting ketika mencoba mengunggah file besar melalui cURL. Alih-alih benang skool lama, sesuatu seperti Grand Central Dispatch Apple akan lebih baik. Atau bahkan sesuatu yang mirip dengan JavaScript di mana Anda dapat membuat permintaan async dan menentukan panggilan balik.
10) Penamaan / pesanan yang konsisten (yaitu tumpukan jerami jarum) akan menyenangkan, tapi saya pikir ini bisa lebih baik diselesaikan dengan SPL.
11) Shell PHP interaktif yang didukung secara resmi, seperti IRB. Facebook memiliki satu panggilan
phpsh
yang ditulis dengan Python, tetapi tidak memiliki polesan yang ingin saya lihat.12) Untuk Reflection API, tambahkan dukungan untuk (a) komentar blokir pada konstanta (global & kelas), dan (b) dukungan untuk mem-parsing komentar seperti PHPDoc ke dalam struktur data yang masuk akal. Ada paket PECL yang disebut "docblock" yang mencoba melakukan ini, tetapi sepertinya penulis tidak terlalu jauh.
EDIT: 13) Saya juga ingin melihat kemampuan untuk menggunakan
!
dan?
dalam nama-nama fungsi - seperti Ruby.sumber
1) Array pemahaman dalam gaya pemahaman daftar Python:
2) Sintaks array pendek
3) Buat kosong () tidak menganggap string '0' sebagai benar
sumber
empty()
adalah kebalikan dariif ($x)
, jadi masuk akal kalauempty('0')
itu benar, karenaif ('0')
itu salah. Satu-satunya perbedaan adalah,empty()
tidak membuang pemberitahuan jika variabel tidak disetel.Saya ingin melihat metode yang sah untuk membuat / mendefinisikan array KONSTAN. Ada beberapa cara meretas untuk mensimulasikan fungsi semacam ini tetapi akan lebih baik jika itu hanya fitur langsung dari PHP. Akan lebih baik jika Anda bisa membuat array dengan cara yang mirip dengan deklarasi "final" Java.
Saya membuat sistem login yang sangat cepat untuk diatur. Yang harus Anda lakukan adalah mengubah konten array dalam file teks untuk menentukan bidang yang Anda inginkan untuk informasi pengguna. Menggunakan petak untuk loop, ia menangani semuanya, mulai dari pembuatan formulir dan kepekaan input, hingga panggilan basis data, tetapi semuanya bergantung pada array asli ini.
File dengan array dikunci dengan izin tetapi begitu array bergerak di dalam eter itu bisa berubah. Meskipun saya merasa sistemnya cukup aman, saya tidak suka membiarkan apapun terjadi secara kebetulan. Metode untuk menyelesaikan array akan bagus untuk situasi seperti ini.
Ide baru!!
Ohhh, saya memikirkan hal lain yang benar-benar saya sukai di php. Saya ingin beberapa jenis sistem untuk mengontrol operasi file php dan operasi direktori yang mirip dengan cara .htaccess berfungsi.
File .phpaccess harus memicu semacam domain / kebijakan asal yang sama.
Sebagai contoh, Jika saya hosting banyak situs dengan host virtual saya bisa memiliki file .phpaccess di direktori yang akan memberitahu php untuk memeriksa bagian dari skrip yang sedang dieksekusi yang mencoba untuk beroperasi pada direktori yang dilindungi saya. Jika skrip tidak berasal dari direktori atau sub-direktori tersebut maka operasi file / atau operasi socket akan ditolak.
Saya pikir sistem seperti ini akan membuat hosting virtual menjadi lingkungan yang jauh lebih aman. Jika Anda dapat menempatkan salah satunya di atas setiap host virtual, ini akan mengurangi peluang seseorang menemukan cara untuk menyelinap masuk dari host virtual tetangga.
Juga jika akan baik untuk memiliki metode pengamanan dalam kebalikan dari cara ini. yaitu, membatasi jangkauan skrip dalam satu direktori ke direktori itu.
Ini yin dan yang kamu tahu!
sumber
final
. Untuk memperjelas:final
berarti bahwa nilai suatu variabel dapat diset pada saat runtime (tidak seperti konstanta, yang harus berupa ekspresi konstan), tetapi hanya dapat ditetapkan satu kali. Lihat juga C #readonly
.Dua keinginan terbesar saya sebagai programmer PHP hardcore:
sumber
Sintaks bahasa : Ada beberapa petunjuk bagus dalam pihipi dan phpreboot tentang apa yang diminati pengembang (meskipun phpreboot terlalu jauh menjadi JS).
Metodologi pengembangan : Ini akan sangat meningkatkan umur PHP.net jika survei tersebut benar-benar diperhitungkan. Jangan membuat lagi keputusan sintaks sesi IRC sore yang mau tak mau.
Fitur individu : Beberapa telah disebutkan sebelumnya, tapi saya akan dengan senang hati membakar karma untuk menjadi lebih tumpul di sini:
str::toupper()
)\
sintaks namespace shitty shit , memperbaiki parser, dan mengadopsi::
sebagai alternatif. Anda tahu, seperti bahasa asli.Meskipun, jika ini tidak jelas, saya dengan senang hati akan mendanai orang lain untuk melakukan yang terakhir, dan membunuh php.net sebagai implementasi utama.
:P
Oh, perhatikan saja, ini adalah wiki komunitas. Jadi ada kemungkinan Anda sebenarnya bukan di sini untuk karma, tetapi minat yang tulus. Jika demikian, lihat ke dalam <b> masalah </b> yang benar-benar menyakitkan bahasanya (directoritis).
sumber
::
akan lebih alami untuk bahasa sintaksis C / C ++ apa pun. Dan `\` tidak hanya abnormal di antara semua bahasa pemrograman, tetapi memiliki konotasi yang belum teruji. Beberapa diskusi sebelumnya: stackoverflow.com/questions/238550/… atau developers.slashdot.org/article.pl?sid=08/10/26/1610259 dan reddit.com/r/programming/comments/79cut/… - Tetapi di khususnya memutuskan itu tanpa umpan balik dan menandakan komunitas pengembang untuk menyedotnya bukanlah langkah yang disambut baik.Saya ingin melihat penyatuan Kesalahan dan Pengecualian menjadi satu konsep (Pengecualian). Sangat bagus untuk dapat menangkap pengecualian dan menulisnya ke log, untuk menemukan dan memperbaiki bug dengan cara itu. Tetapi jika ada sesuatu yang secara fundamental salah (baca: Kesalahan PHP) dalam codepath yang sangat jarang ditemukan, tidak ada cara yang baik untuk menyalurkan informasi itu ke dalam basis data masalah yang sama.
Tolong, Santa, perkenalkan sakelar di php.ini yang akan membuat semua kesalahan menjadi pengecualian - idealnya, pengecualian yang bisa saya tangkap dalam kode saya.
sumber
PHP sangat cocok untuk saya karena mengetuk situs web kecil hingga menengah; Saya harus sedikit tidak imajinatif, satu-satunya hal yang dapat saya pikirkan sebagai jawaban atas pertanyaan ini adalah sesuatu yang membuatnya lebih baik untuk situs dengan lalu lintas tinggi.
Saya sedang berpikir dalam hal memunculkan proses ke core lain, misalnya memperbarui database dalam satu proses sambil membuat halaman output dalam proses lain. Pencarian google cepat menunjukkan bahwa ini dapat disimulasikan, tetapi tidak didukung secara langsung di php saat ini.
sumber
Saya sangat merindukan bahwa tipe skalar tidak diperlakukan sebagai objek, dan objek nyata tidak dapat bertindak seperti tipe atau objek lain (kecuali untuk string karena __toString ()).
sumber
sumber
Bersihkan "Catatan Kontribusi Pengguna" di http://php.net . Kadang-kadang mereka benar-benar berantakan, sementara menjadi nilai besar secara umum.
sumber
Ada beberapa fungsi array yang cukup baik di PHP, menyediakan kapasitas pemrosesan daftar, dengan panggilan balik dan
create_function()
menyediakan kalkulus lambda dasar.Masalah utama dengan itu, adalah bahwa itu terlalu bertele-tele dalam PHP, sistem singkatan akan sangat baik, terutama di mana peta / mengurangi perintah yang bersangkutan.
Lebih penting lagi, fungsi daftar tidak sepenuhnya lengkap:
foldr
fungsi,array_reduce()
menyediakanfoldl
array_map()
harus meneruskan kunci dalam argumen kedua, sepertiarray_walk()
halnyaarray_map_keys()
dapat berguna untuk modifikasi kuncirange()
,array_fill()
danarray_fill_keys()
hanya menangani begitu banyak kasus, danarray_filter()
terpisahSaya tidak bermaksud membuat PHP ke Haskell, tetapi PHP sering digunakan untuk manipulasi struktur data tipe daftar dan memiliki seperangkat alat lengkap dalam hal ini akan berguna.
sumber
Overloading operator:
sumber
Tambahkan Pengecualian alih-alih menghasilkan E_WARNING ... Sangat menjengkelkan karena saya tidak dapat menggunakan sesuatu seperti:
Tentu saja, saat ini tidak terlalu praktis tetapi sangat menjengkelkan untuk menerima:
PERINGATAN
PERINGATAN
PERINGATAN
dan saya tidak dapat mengontrol aliran kode tanpa menulis error_handler saya sendiri dan mengendus string kesalahan yang telah dihasilkan (izin, nama file salah atau apa pun; Saya tidak keberatan tentang sumber kesalahan lain di sini) untuk melemparkan pengecualian yang benar .
Saya harap saya belum menjelaskan mengapa ini penting.
PHP menjadi Object-Oriented beberapa waktu yang lalu dan kami, programmer yang menggunakan PHP, menantikan fitur OO, tidak memperkenalkan "goto" ... Ketika saya menemukan itu benar-benar bahagia, saya pikir itu adalah hari April Mop.
sumber
Mengkonsolidasikan model objek - membuat semua objek memperluas kelas Object dasar. Kelas Object akan (antara lain) mengimplementasikan semua metode sihir (jadi mereka tidak lagi ajaib!)
Pindahkan ekstensi ke ruang nama mereka sendiri - hapus berantakan ruang nama global
$conn = new \MySQLi\Connection();
Batalkan
spl_autoload()
fungsi! Serius, ini mungkin salah satu fitur terbesar dari PHP dan juga yang paling tidak berguna pada saat yang sama.spl_autoload
adalah autoloader default, yang mendukung ruang nama dan beberapa ekstensi file, tetapi untuk beberapa alasan yang tidak diketahui mengharuskan nama file lebih kecil. Ada laporan bug yang diisi untuk ini , tetapi staf menjawab mereka tidak akan memperbaikinya karena kompatibilitas ke belakang. Benar ... ini tidak seperti setiap kerangka kerja yang dilengkapi autoloadernya sendiri, karena yang default lumpuh!sumber
Dukungan file besar. Cukup cantik?
Lihat http://bugs.php.net/bug.php?id=27792 (meskipun mungkin ada lebih banyak area / fungsi yang perlu perhatian juga).
sumber
Bawa taint support hingga versi terbaru dan sertakan dalam build standar, lebih baik dihidupkan di konfigurasi default http://wiki.php.net/rfc/taint
Ini akan mencegah serangan injeksi XSS dan SQL dengan membuat kode orang dengan benar.
sumber