it-swarm-id.com

Fitur apa yang ingin Anda miliki di PHP?

Karena ini musim liburan sekarang dan semua orang membuat keinginan, saya bertanya-tanya - fitur bahasa mana yang Anda inginkan PHP akan ditambahkan? Saya tertarik dengan beberapa saran/keinginan praktis untuk bahasa tersebut. Secara praktis saya berarti:

  1. Sesuatu yang dapat dilakukan secara praktis (bukan: "Saya berharap PHP akan menebak apa artinya kode saya dan memperbaiki bug untuk saya" atau "Saya berharap kode apa pun akan dijalankan di bawah 5ms")
  2. Sesuatu yang tidak memerlukan perubahan 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 ")
  3. Sesuatu yang tidak perlu melanggar semua kode yang ada (tidak: "Mari kita ganti nama 500 fungsi dan ubah urutan parameter untuk mereka")
  4. Sesuatu yang tidak mengubah bahasa atau beberapa aspek yang menarik dari itu (tidak: "Saya berharap ada ekstensi untuk mendukung protokol XYZ" atau "Saya berharap bug # 12345 akhirnya diperbaiki ")
  5. 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 inti PHP pengembang.

88
StasM

Saya tidak akan keberatan menyebutkan parameter.

getData(0, 10, filter => NULL, cache => true, removeDups => true);
// instead of:
getData(0, 10, NULL, true, true);

// or how about:
img(src => 'blah.jpg', alt => 'an albino platypus', title => 'Yowza!');

Sayangnya PHP devs singkirkan ide it sudah.

Lebih banyak referensi:

echo something_that_returns_array()[4];

Yang lain menyebutkan parameter bernama, dan sintaks array lebih pendek. Saya tidak akan keberatan sintaks objek lebih pendek, juga.

$a1 = array(1, 2, 3, 4);
$a2 = [1, 2, 3, 4];

$b1 = (object)array('name' => 'foo');
$b2 = {'name' => 'foo'}; // or something?
93
Annika Backstrom

Setelah bekerja dengan PHP selama sekitar 13 tahun, dan banyak dengan JS selama sekitar 4, ada beberapa hal yang saya pikir PHP sebaiknya meminjam 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:

$arr     = [1,2,3,4];
$assoc   = [foo=>'bar', baz=>'boo'];
$stdobj  = {foo->'bar', baz->'boo'};

Apakah (IMHO) lebih mudah untuk menulis dan bersih daripada

$arr     = array(1,2,3,4); // not too bad
$assoc   = array("foo"=>'bar', baz=>'boo'); // not too bad either
$stdobj  = new stdClass; // this gets pretty rough
$stdobj->foo = 'bar';
$stdobj->baz = 'boo';

Saya telah 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 kedua, 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 fungsi string standar yang ramah-kode keluar dari kotak akan menjadi kemenangan besar bagi programmer PHP.

Terima kasih untuk bertanya!

72
Funkatron

Hal-hal yang saya inginkan, sebagai mantan apologis lama PHP:

  1. Sintaks yang lebih pendek untuk array. PHP array adalah salah satu fitur bahasa awesomest karena fleksibilitas mereka, tetapi itu adalah hambatan untuk menulis some_array_method($argity, array('key' => $value));. Saya yakin proposal ini sudah dikeluarkan dari daftar mailing PHP sayangnya.
  2. finally support
  3. Atribut/anotasi. Ini memungkinkan Anda untuk menambahkan perilaku kustom ke metode dengan cara yang memungkinkan penggunaan kembali kode. Sebagai contoh, dalam kerangka kerja MVC, seseorang dapat mendefinisikan AuthorizeAttribute yang akan menunjukkan bahwa metode pengontrol atau tindakan mengharuskan pengguna untuk diotorisasi. Kerangka itu sendiri akan bertanggung jawab untuk mencari atribut dan menindaklanjutinya. 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.
  4. Sintaks lambda pendek. Daripada harus menulis function($x){ return $x*2;}, mungkin saya bisa menulis $x => return $x*2, Atau sesuatu. Sekali lagi ini adalah sesuatu yang membuatnya menjadi seret untuk menggunakan fitur ini. Misalnya $results = array_filter(array(1,2,3), function($a) { return $a % 2; }): vs $results = array_filter(array(1,2,3), $a => return $a % 2 ); Yang pertama hanya memiliki lebih banyak pipa ledeng yang pada dasarnya tidak relevan dengan pekerjaan aktual yang ingin Anda capai.
  5. Built-in Decimal (matematika fixed-point) yang mendukung operasi matematika melalui operator normal akan menjadi semacam Nice, karena kami tidak memiliki kelebihan operator.
  6. METODE MAGIC MOAR. Metode sulap itu hebat. Saya bisa melihat PHP menambahkan operator yang berlebihan melalui metode ajaib (saya tahu ini pada dasarnya tidak akan pernah terjadi.) Tetapi secara umum, mereka memberikan cara yang sangat bagus untuk menghubungkan ke bahasa dan melakukan hal-hal keren.
48
davidtbernal

Buat PHP benar-benar berorientasi objek. slap on another global function Evolusi PHP harus diakhiri.

array_merge(array_filter(array_intersect_key($arr1, $arr2), "is_int"), $arr3);

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 dengan bark(wakeup($dog))

$arr1->array_intersect_key($arr2)->array_filter("is_int")->array_merge($arr3);

Anda telah membuat langkah untuk mengaktifkan dukungan objek/metode sekarang, silakan gunakan dalam fungsi inti PHP yang sebenarnya.

Mari kita ganti nama 500 fungsi dan ubah urutan parameter untuknya.

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?

48
Keyo

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.

40
Nick Berardi

Oh Ketik mengisyaratkan untuk primitif. Itu akan menyenangkan.

38
ruurd

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.

String PHP hanyalah array byte biasa. Konten mereka tidak portabel karena tergantung pada pengkodean default saat ini.

Hal yang sama berlaku untuk representasi yang dibangun oleh serialisasi. Ini berisi representasi byte panjang yang diawali dari string tanpa benar-benar menyimpan informasi pengodean apa pun.

Sebagian besar fungsi PHP (string) tidak memiliki petunjuk tentang Unicode. Untuk daftar terperinci termasuk tingkat risiko masing-masing fungsi, lihat: http://www.phpwact.org/php/ i18n/utf-8

http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/

34
Emil Stenström

Buat objek string seperti, dengan metode bawaan untuk mengganti yang non-objek yang dinamai dan parameter. misalnya.

$subject->replace($search,$replace);
$string->split($separator);
$string->trim();

dll.

Edit: 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.

32
rjmunro

1) Saya akan senang untuk objek yang baru dipakai untuk mengembalikan "$ this" sehingga saya dapat menggunakan metode chain, $ user = User baru ('john') -> setLastName ('Doe') -> save ();

2) Jika Anda pernah menggunakan Ruby, dan simpul terbaru, mereka memiliki Shell interaktif besar (IRB). Saya ingin PHP untuk memilikinya yang sebenarnya berguna.

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 (mis. Jarum tumpukan jerami)

24
Jakefolio

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 PHP penggunaan programmer termasuk () sebagai jenis panggilan fungsi daripada cara untuk referensi perpustakaan. Ini mengarah ke segala macam ambiguitas dalam keadaan variabel dan kode tidak stabil. Ganti ini dengan perintah 'gunakan' seperti Perl.

2) berikan di luar kotak metode kompilasi aplikasi PHP ke dalam file bytecode tunggal yang dapat dieksekusi 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 berikan mode 'tanpa embed'. Ini adalah kekacauan mutlak dan mendorong desain yang buruk dengan menggabungkan logika aplikasi dan presentasi Pengembang harus menggunakan templat untuk tampilan dan tidak menampar file PHP bersama-sama dan berharap yang terbaik.

Tertanda,

GrandmasterB

ps: jangan dengarkan apa yang orang lain katakan, aku sudah baik sepanjang tahun

20
GrandmasterB

Arahan ini untuk E_ERROR pada konstanta yang tidak terdefinisi, daripada menganggapnya sebagai string dengan E_NOTICE.

18
Annika Backstrom

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 !

14
David Murdoch

1) Sintaks array/objek yang lebih pendek, ala JavaScript (seperti yang disebutkan sebelumnya)

2) Izinkan const variabel untuk memungkinkan hasil perhitungan seperti define() tidak.

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 menggunakan array(). Anda harus dapat melakukan hal-hal seperti array_filter($array_object_instance) tanpa melakukan array_filter($array_object_instance->getArrayCopy()). Bahkan lebih baik, tentu saja akan menjadi $array_object_instance->filter().

7) Unicode Full-on akan bagus.

8) Berhenti melakukan konversi tipe otomatis yang aneh. Misalnya, Anda seharusnya tidak dapat echo objek SimpleXMLElement tanpa terlebih dahulu mengetikkannya sebagai string. Atau setidaknya, melempar sesuatu saat itu terjadi (mis., Dalam mode ketat, atau mode apa pun error_reporting(-1) adalah).

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 (mis. Jarum tumpukan jerami) akan menyenangkan, tapi saya pikir ini bisa diselesaikan dengan lebih baik dengan SPL.

11) Interaktif PHP Shell, seperti IRB. Facebook memiliki satu yang disebut phpsh) yang ditulis dengan Python, tetapi tidak memiliki semir 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 fungsi - seperti Ruby bisa.

13
Ryan Parman
13
Kemo

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 eter itu bisa berubah. Walaupun 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 bagian atas setiap Host virtual, ini akan mengurangi peluang seseorang menemukan cara untuk menyelinap masuk dari Host virtual tetangga.

Juga jika itu 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!

12
Dave B.

1) Array pemahaman dalam gaya Python daftar pemahaman:

$newlist = array($x->something for $x in $oldlist);

//with short array syntax:
$newlist = [$x->something for $x in $oldlist];

2) Sintaks array pendek

$newlist = [1,2,3,4,...];

3) Buat kosong () tidak menganggap string '0' sebagai benar

12
sfrench

Dua keinginan terbesar saya sebagai hardcore PHP programmer:

  1. Dukungan akhirnya. Ini adalah kekacauan besar untuk secara fiksi menyiasati hal ini melalui bendera atau cara serupa.
  2. Saya akan SUKA melihat dukungan pada sintaks C # untuk getter dan setter. Ketika Anda memiliki banyak getter dan setter, sintaksis sederhana seperti C # adalah penguat kinerja yang hebat alih-alih melakukannya dengan cara Java dan menulis metode pengambil dan penyetel. Metode sihir sangat bagus dalam kasus di mana Anda ingin membuat anggota secara dinamis (misalnya, jika Anda ingin memberikan renderer templat beberapa variabel untuk digunakan), tetapi tidak baik untuk properti normal yang Anda inginkan IDE untuk pelengkapan otomatis, ketahui jenisnya, dan seterusnya. Ini akan membantu membuat kode lebih kecil dan masih dapat dibaca dan mudah digunakan.
11
Johnco

Sintaks bahasa : Ada beberapa petunjuk bagus di pihipi dan phpreboot hal yang menarik minat pengembang (meskipun phpreboot terlalu jauh menjadi JS).

Metodologi pengembangan : Ini akan sangat meningkatkan umur PHP.net jika survei tersebut benar-benar diperhitungkan. Jangan lagi membuat sintaksis sesi sore mau tak mau IRC sesi.

Fitur individual : Beberapa telah disebutkan sebelumnya, tapi saya akan dengan senang hati membakar beberapa karma untuk menjadi lebih tumpul di sini:

  • Jenis string Unicode.
  • Bigint (lihat Python).
  • Runkit builtin untuk menghapus/mengganti nama/mengabaikan fungsi dan kelas builtin, yang tidak selalu dirancang dengan baik.
  • OOP modern
    • multiple inheritance (alih-alih kompleksitas untuk mendukung kasus Edge yang jarang dengan sintaksis yang canggung)
    • skalar dapat berfungsi ganda sebagai objek (lihat Python), mis. array () berfungsi sebagai ArrayObject, atau string sebagai SplString (perlu metode yang dapat digunakan, semua fungsi string harus tersedia sebagai str::toupper())
  • Menghilangkan kotoran sialan \ sintaks namespace , perbaiki parser, dan adopsi :: sebagai alternatif. Anda tahu, seperti bahasa asli.
  • Setiap variasi LINQ (meskipun saya tidak percaya kalian merancang sintaks yang masuk akal)
  • atau XML literal.
  • Singkirkan perilaku runtime php.ini dan sakelar semantik. Memang benar, hal ini menghilangkan kegembiraan, tetapi akan menguntungkan pengembang dan basis pengguna.
  • Ya, magic_quotes belum hilang.
  • Ubah bytecode Zend Engine menjadi PBC

Meskipun, jika ini tidak jelas, saya akan dengan senang hati mendanai orang lain untuk melakukan yang terakhir, dan mematikan php.net sebagai implementasi utama. :P
Oh, perhatikan saja, ini 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 (direkturitis).

9
mario

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: PHP Kesalahan) 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.

8
Alex
  • dukungan untuk enumerasi (seperti Java 1.5+)
  • Mampu mendefinisikan jenis metode pengembalian, di antarmuka dan kelas
  • mendukung definisi anotasi/metadata tentang properti dan metode.
  • dapat melakukan petunjuk tipe ketat untuk argumen skalar metode.
7
Kees van Dieren

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.

7
geekbrit

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 ()).

7
pestaa

Bersihkan "Catatan Kontribusi Pengguna" di http://php.net . Kadang-kadang mereka benar-benar berantakan, sementara menjadi nilai besar secara umum.

6
bobah

Ada beberapa fungsi array yang cukup baik di PHP, menyediakan kapasitas pemrosesan daftar, dengan callback 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:

  • tidak ada fungsi foldr, array_reduce() memberikan foldl
  • array_map() harus meneruskan kunci pada argumen kedua, seperti yang dilakukan array_walk()
  • sebuah array_map_keys() dapat berguna untuk modifikasi kunci
  • pemahaman daftar sangat kikuk, range(), array_fill() dan array_fill_keys() hanya menangani begitu banyak kasus, dan array_filter() terpisah

Saya tidak bertujuan untuk membuat PHP untuk Haskell, tetapi PHP sering digunakan untuk manipulasi struktur data tipe daftar dan memiliki set lengkap alat dalam hal ini) anggap akan bermanfaat.

5
Orbling

Kelebihan operator:

$result = $MatrixA + $MatrixB * $MatrixC;
5
MicE

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).

4
Don MacAskill

Tambahkan Pengecualian alih-alih menghasilkan E_WARNING ... Sangat menjengkelkan karena saya tidak dapat menggunakan sesuatu seperti:

try{
   $f = fopen('asd', 'r');
   flock($f, LOCK_SH);

   while(!feof($f)){
       echo fread($f, 512);
   }

   fclose($f);

}catch(IOException $ex){
   echo 'Oops, something wrong: '.$ex->getCode();
}

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 OO fitur, tidak memperkenalkan "goto" ... Ketika saya tahu itu benar-benar bahagia, saya pikir itu adalah hari April Mop.

4
eRIZ
  1. Mengkonsolidasikan model objek - membuat semua objek memperluas kelas Object dasar. Kelas Object akan (antara lain) mengimplementasikan semua metode sihir (jadi mereka tidak lagi ajaib!)

  2. Pindahkan ekstensi ke namespace mereka sendiri - hapus berantakan namespace global $conn = new \MySQLi\Connection();

  3. Batalkan fungsi spl_autoload()! 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 namespaces dan beberapa ekstensi file, tetapi untuk beberapa alasan yang tidak diketahui mengharuskan nama file diturunkan lebih kecil. Ada laporan bug diisi untuk ini , tetapi staf menjawab mereka tidak akan memperbaikinya karena kompatibilitas ke belakang. Benar ... tidak seperti setiap kerangka kerja yang dilengkapi autoloader sendiri, karena yang default lumpuh!

4
Mchl

Bawa taint support hingga versi terbaru dan sertakan dalam build standar, lebih baik dihidupkan dalam konfigurasi default http://wiki.php.net/rfc/taint

Ini akan mencegah serangan injeksi XSS dan SQL dengan membuat kode orang dengan benar.

4
rjmunro

Anotasi untuk PHP akan lebih bagus, Satu fitur yang akan menonjol untuk tahun-tahun mendatang. Fitur ini akan membantu untuk menulis kerangka kerja besar dengan kode bersih.

3
user10916

Saya ingin melihat else klausa untuk while, for, dan foreach. Misalnya.:

while (/*condition*/) {
   /* display each result */
}
else {
   /* condition was never true; display "no results found" message */
}

Blok else hanya dieksekusi jika kondisi untuk while adalah tidak pernah true.

Ini akan membuatnya sehingga Anda tidak perlu melacak bendera Boolean, dan mungkin itu bisa membantu Anda berpikir tentang kasus batas dan kemungkinan kondisi kesalahan.

3
Macneil

Jangan singkirkan tag terbuka pendek, khususnya echo one = (. Ini:

<?=$myvar?>

... jauh lebih baik dari ini:

<?php echo $myvar;?>
3
dukeofgaming
  1. Saya suatu hari ingin melihat tipe data, namun - Saya juga suka kesederhanaan karena tidak harus berurusan dengan tipe data, ini adalah pedang bermata dua bagi saya.
  2. ruang nama!
  3. Panggilan fungsi yang berlebihan dengan tanda tangan metode yang berbeda
  4. Dukungan yang lebih baik untuk pengujian unit dan injeksi kode, PHPUnit adalah alat yang luar biasa, juga kerangka injeksi kode Symfony sangat menakjubkan ... namun mereka semua datang dengan kurva belajar mereka sendiri.
3
cdnicoll

Tampaknya tidak ada yang menyebutkan jenis keamanan opsional .

Akan sangat bagus untuk dapat menulis kode seperti ini:

<?php
$someVariable = 123;
$someVariable = "Hello World";

int $anotherVariable = 123;
////$anotherVariable  = "Hello"; // This must cause runtime exception.
////int $lastVariable = "World"; // This must cause it too.
?>

Contoh lain:

<?php
// Current style (which must remain).
function SayHello($howManyTimes)
{
    if (!is_int($howManyTimes))
    {
        throw new Exception('Argument $howManyTimes is invalid. An integer was expected, instead of ' . gettype($howManyTimes) . '.');
    }

    echo str_repeat('Hello', $howManyTimes);
}

// New, optional, style, allowing to have a shorter code.
function SayWorld(int $howManyTimes)
{
    echo str_repeat('World', $howManyTimes);
}

SayHello(123);
SayHello("Hello World");

SayWorld(123);
////SayWorld("Hello World"); // This must cause runtime exception.
?>
2
Arseni Mourzenko

Izinkan untuk namespace file dari panggilan panggil, sesuatu seperti ini

include('mytemplate.php', 'MyNamespace');

atau

include 'mytemplate.php' use MyNamespace;

Dan mulai izinkan kami untuk mengimpor ruang nama ("gunakan") tanpa awalan:

use OtherNamespace as self;

(Alih-alih harus mengimpor setiap kelas individu untuk menggunakannya tanpa awalan namespace)

2
user11122
  • Non-blocking Query SQL (Seperti memasukkan beberapa log, tetapi jangan menunggu hasil dari query)
  • Query SQL Paralel

hanya mimpi

2
Erlango

Generator. Seperti dalam Python, dengan hasil.

2
ts01

Kemampuan untuk melempar pengecualian dalam __destructor atau __toString. Dan, sungguh, adakah penjelasan mengapa itu tidak mungkin?

2
ts01

Itu bagus untuk memiliki kemungkinan untuk mengatur tipe primitif (bool | boolean, int | integer, float, double, string, objek) dari suatu parameter dalam suatu metode karena array diperbolehkan.

Contoh:

  • arus:

    class HttpResponse {
    public function __construct($version, $statuscode = HttpStatus::OK, HttpResponseHeaders $headers = array(), $body = '');
    

    }

  • berharap:

    class HttpResponse { public function __construct($version, integer $statuscode = HttpStatus::OK, HttpResponseHeaders $headers = array(), string $body = ''); }
    

Saya pikir juga memiliki kelas statis Assert yang dapat bermanfaat.

2
user11251

dukungan untuk petunjuk jenis untuk semua jenis, dan metode sulap _toXXX untuk setiap jenis yang memungkinkan. (php penggunaan umum melayang IMHO bukan untuk membatasi jenis juggling/dengan beberapa pengecualian, seperti float konversi <-> int /)

2
ts01

Metode overloading yang pasti menggunakan tipe hinting untuk membedakan tanda tangan metode. Lebih jauh lagi, saya ingin melihat semacam "atribut" gaya ASP.NET, sehingga tindakan pengontrol saya dalam PHP kerangka kerja MVC bisa terlihat seperti ini:

/* [HttpGet] */
public function login() {}

/* [HttpPost] */
public function login() {}
2
TaylorOtwell

PHP membutuhkan kelas string Unicode yang tidak berubah. Memastikan string input valid, UTF-8 dinormalisasi dan tetap valid harus sepele.

$str = new Utf8String('āll īs ōk');
$str = $str->ucwords(); // Āll Īs Ōk
$str = $str->strtolower()->toAscii(); // all is ok
(string) $str; // UTF-8 bytes

Saya membuat prototipe berdasarkan PHP-UTF8 .

2
Steve Clay

Literal regexp asli, Perl-style qw{}, qq{} Dan q{} Mengutip.

Metode rantai dirantai untuk semua objek: $object{ ->method1(); ->method2(); ->getPerson()->getName(); }

Ungkapan pernyataan: ({echo $a; $a = $a + 1; $a})

KONSISTEN, NON-CONFIGURABLE, TIDAK BISA DIHIDUPKAN short_open_tags. Jika tidak dapat dikonfigurasi, PHP kode akan lebih portabel. Lihat apa termasuk ERB - tag gaya

1
Ming-Tang
  • Saya ingin melihat beberapa cara asli untuk mengatur open_basedir di host virtual berdasarkan nama domain secara otomatis, tanpa harus mengkonfigurasi satu direktif per Host (mirip dengan patch Jason Greene, tetapi asli).

  • Tolong, global aplikasi-lebar! Variabel global aplikasi akan tersedia untuk semua skrip php, setelah diinisialisasi.

  • Beberapa cara untuk melepaskan sesi untuk utas lainnya, tanpa menutupnya:

 session_start (); 
 $ _ SESSION ['favcolor'] = 'white'; 
 session_flush (); // sesi sekarang tidak terblokir sehingga utas lain dapat menggunakannya 
 // loop besar ... 
 $ _ SESI ['taste'] = 'manis'; // sesi blok secara otomatis lagi 
 session_close (); 
  • Mungkin beberapa on-disk cache adalah Nice, jadi kita dapat mengkompilasi skrip php secara manual untuk eksekusi yang lebih cepat. Mirip dengan cache memori, tetapi dengan file pada disk dan pembuatan manual (mungkin menggunakan beberapa ekstensi file baru).

  • Juga, sesuatu yang mirip dengan <? Php = $ variable?> Sebagai pintasan ke <? Php echo $ variable; ?> akan menjadi Nice (seperti pada tag asp, tetapi dengan tag pendek/asp dinonaktifkan).

1
Bacco

dan, jelas, get_shutdown_functions () dan unregister_shutdown_function (). Saat ini tidak ada cara untuk mengaksesnya. Dan lebih umum, beberapa dukungan abstrak untuk penimbunan panggilan balik - sesuatu untuk menyatukan spl_autoloads, fungsi penonaktifan, penangan kesalahan (saat ini tidak dapat ditumpuk, tapi mungkin ...) dll. Jenis register_callback ($ panggilan balik, $ tumpukan) dan seterusnya, dengan beberapa tumpukan standar ('pengisian otomatis', 'shutdown', 'kesalahan' ...) dipanggil oleh php atau oleh pengguna itu sendiri.

1
ts01

menambahkan pembungkus objek untuk ekstensi menggunakan sumber daya (curl, ftp, Gd2 ...). Suka

 $oFtp = new Ftp();

 $oFtp->connect();

 $oFtp->close();
1
ts01
  • ruang lingkup leksikal untuk lambdas (menggunakan kata kunci lain kemudian berfungsi) (atau memblokir sintaks untuk membuat ruang lingkup leksikal yang tepat?)
  • membuat lambdas di properti obyek bisa dipanggil
  • selalu menyiratkan titik koma dengan kawat gigi lambda
  • fucking add use () untuk fungsi normal !!
  • sifat-sifat
  • kemampuan untuk mencegat instanceof/is_a ()
  • generator
  • buka Pengecualian untuk modifikasi runtime
  • fungsi untuk mengecek antarmuka tanpa mengimplementasikannya
1
alan blaire

Dua gangguan pertama saya tidak ada hubungannya dengan PHP, tetapi dengan konvensi penggunaannya yang tersirat.

  1. 'Ekstensi nama file' untuk kode perpustakaan (mis. PEAR/Horde/Zend/dll.) Harus diakhiri dengan .phps Dan bukan .php. Keuntungan dari hal ini adalah bahwa ia dengan jelas memisahkan kode yang harus dijalankan dan kode yang akan dimasukkan, serta secara opsional semua kode (Anda) cukup mudah dibaca/dapat dijelajahi dari server. Sebagai bonus, spl_filename_extensions() dapat digunakan dalam autoloader Anda untuk kenyamanan orang lain.

  2. Konvensi (dalam dokumen) adalah bahwa :: Digunakan untuk kedua metode contoh statis, saya akan berterima kasih jika mereka akan menggunakan :: Untuk statis dan -> Misalnya barang. Sebagai konvensi yang baik masih akan ada ruang untuk kesalahan tentang interpretasi, tetapi setidaknya lebih jelas.

Untuk beberapa nama, saya juga ingin melihat yang berikut:

  1. GetDocComment Reflection * (atau mungkin varian lain dari nama atau argumen) harus lebih liberal dan juga hanya mendapatkan komentar pertama (hingga ruang) di atas tipe yang disebutkan. Dengan kata lain: Saya tidak suka dokumen verbose (baca: makan baris) sementara saya benar-benar hanya ingin dapat memberikan minimum di semua jenis komentar: //, # , atau /* ... */.

  2. Daftar ruang nama yang digunakan, mis. getdefinednamespaces().

  3. Perilaku 'konstanta tidak terdefinisi' harus dapat diubah oleh arahan ini, mis. string kosong atau kesalahan fatal. Namun demikian, seharusnya tidak pernah secara implisit diubah menjadi string! (itu seperti; dalam javascript).

  4. Konstanta __CLASS__ Juga harus secara otomatis berfungsi seperti ini (disebut secara statis) stdClass::__CLASS__ == '\stdClass'. Dengan kata lain, alih-alih merujuk ke kelas dengan string, saya ingin menggunakan kelas dan konstanta sihirnya __CLASS__ Untuk merujuknya. (ya itu adalah idefix)

  5. Ketik metode casting dan sihir __fromType($instancetype) dan __toType($type). Jadi suatu objek dapat dilemparkan ke integer: $y = (int) $x atau ke objek lain $y = (BeanWrap) $x. Namun demikian, implementasi dari ini berarti bahwa dari dua belas gips yang tersedia yang mencakup delapan jenis berbeda, nama gips ini tidak dapat digunakan sebagai nama kelas (mis. Int, binary, boolean) lagi.

1
23JUL

Ketika saya melihat utas ini, saya pikir akan berguna untuk menyebutkan beberapa artikel yang saya temui.

  1. Semacam Groovy Groovy? operator di PHP: http://justafewlines.com/2009/10/groovys-operator-in-php-sort-of/
  2. Tingkatkan penutupan: http://justafewlines.com/2009/10/whats-wrong-with-php-closures/
1
Alexey Shein

Menjadi cukup bijak untuk tidak melanggar kompatibilitas. Saya telah mempelajari keberadaan goto sebagai kata kunci dengan cara yang sulit, saya menggunakannya sebagai nama metode, jadi pembaruan kode saya untuk php 5.3 memakan waktu 2 atau 3 jam.

Sesuatu seperti peran untuk kelas akan menjadi tambahan yang bagus untuk sistem objek. Tidak ada yang rumit.

class abc { use xyz::method; use uvw::__all; }

Ini akan memilih metode metode dari kelas xyz dan semua metode dari kelas uvm.

Panggilan konstruktor harus dapat digunakan sebagai objek tepat setelah pembuatan.

new goodie()->youp();
1
giftnuss
  1. Biarkan skalars diperlakukan seperti benda. Jika saya mencoba melakukan $ scalar-> toLower (); kenapa bilang aku salah? Mengapa tidak sementara saja melemparkannya ke sesuatu seperti jenis objek "Skalar" dan kemudian pindah ke "metode tidak terdefinisi" (mungkin tidak melakukan ini sebagai nol)?

  2. Hapus sumber daya dari userspace. PHP memiliki objek sekarang. Segala sesuatu yang merupakan sumber daya sekarang dapat berada dalam pembungkus objek yang menyembunyikannya sebagai properti pribadi. Fungsionalitas mungkin perlu ditambahkan untuk __sleep () dan __wakeup (). Sebagian besar sumber daya dapat dengan mudah diciptakan kembali dalam keadaan "mirip." Bahkan jika mereka tidak bisa, objek PDO tidak dapat diserialisasi: Saya menganggap hal yang sama dapat dilakukan dengan objek lain.

  3. Biarkan komunitas aktual PHP memberikan suara dengan kode mereka: izinkan kami untuk mendefinisikan kembali metode, kelas, dan fungsi yang ada. Kode yang buruk akan membusuk, sama seperti di Javascript. Ini akan membiarkan orang-orang menggunakan PHP mencari tahu apa yang mereka butuhkan alih-alih perlu menebak setiap saat. Fungsi dan fungsi yang digunakan/ditimpa yang paling mungkin perlu dipertimbangkan.

    Ini juga memiliki efek samping dari keterlibatan komunitas PHP dengan masalah UTF (semoga UTF-8). Alih-alih memiliki pengaturan seluruh sistem yang mengaktifkan atau menonaktifkan unicode, PHP pengembang dapat mengesampingkan fungsionalitas yang mereka butuhkan hanya untuk aplikasi mereka.

  4. Jadikan _ sebagai pemisah namespace implisit. Orang-orang telah menggunakannya sejak PHP5, biarkan orang membuat kode mereka alih-alih menulis ulang jika untuk PHP 5.3. Saya tidak tahu kerumitannya. Saya tahu awalnya ada beberapa pemikiran tentang kode yang apakah nama kelas seperti Zend_Exception: Izinkan, pengembang akan selalu harus mengaksesnya sebagai Zend_Exception atau\Zend\Exception dan tidak pernah Exception. Perlakukan sebagai nama lengkap dan bukan hanya sebagian saja.

  5. OOP: ambil beberapa petunjuk dari Javascript/Actionscript/Python. Sifat terlihat menjanjikan, tetapi mengubah jenis secara dinamis saat runtime akan menjadi luar biasa.

  6. Properti: Saya melihat pembicaraan dalam karya tentang properti, silakan implementasikan secara dinamis. PHP seharusnya merupakan bahasa yang dinamis. Kita harus dapat mendefinisikan properti (hampir semuanya) saat runtime.

  7. Perlakukan konstanta seperti apa yang digunakan untuk: variabel global. Kelas/Fungsi/Ruang nama semua sesuai dengan tagihan ini. Mungkin ketika semua orang mulai menyadari bahwa mereka semua adalah global saat ini akan ada lebih banyak ide untuk memperbaiki masalah ada begitu banyak variabel/konstanta global.

  8. Kompilasi JIT: Javascript dapat melakukannya dan menjadi super cepat. PHP adalah salah satu dari sedikit yang tertinggal dalam yang satu ini.

  9. PHP seharusnya dioptimalkan untuk "Hypertext", namun tidak ada cara mudah untuk menghindari output seperti itu. Secara pribadi, saya akan mendefinisikan ulang 'cetak' untuk melakukan htmlspecialchars (). Secara keseluruhan, mungkin hanya perlu printh atau echoh.

  10. Sederhanakan php.ini. php.ini adalah untuk Administrator Sistem, bukan pengembang. Hapus ketidakcocokan tag pendek, perbaiki, atau hapus. Itu menjengkelkan bagi administrator sistem untuk dapat mengaktifkan/menonaktifkan fitur bahasa untuk seluruh sistem. Dan bekerja di sekitar mereka ketika mencoba mendistribusikan perangkat lunak.

  11. Izinkan PHP pengembang ada setelah siklus permintaan berakhir (untuk FastCGI dan Apache). Paparkan ini melalui API. Izinkan administrator sistem untuk menonaktifkan atau membatasi ini. (Memerlukan program php untuk mengembalikan kontrol) ke operator dalam waktu 10 detik atau kehilangan status tahannya).

  12. Jadikan PHP bahasa pemrograman umum. <? Tag php menjengkelkan: tidak diperlukan saat Anda mendeteksi! #/...

  13. Singkatan dan untuk membuat objek {} dan array [], Tajuk lihat PiHiPi , mereka mengimplementasikan ini dan banyak gula sintaksis sederhana lainnya.

    14: Izinkan [] untuk mengakses properti dan fungsi pada objek. Fungsi dan Kelas adalah warga negara kelas satu sekarang, kan? Jadikan [] sebagai cara de-facto (seperti javascript/actioncript) untuk mengakses sesuatu secara dinamis pada objek.

  14. Izinkan PHP kode menjadi PHP modul. Saya tidak harus belajar C hanya untuk membuat perpustakaan saya tersedia di seluruh sistem dalam banyak proses. Biarkan = PHP komunitas mencari yang satu ini lebih jauh.

  15. Alih-alih mengambil ide dari Java/C, ambil lebih banyak dari bahasa dinamis seperti Javascript, Actionscript, dan Python. Fungsionalitas lebih spesifik tercantum di bawah ini.

  16. Kesalahan fatal: mengapa sebagian besar kesalahan masih belum dapat dipulihkan? Saya suka gagasan kesalahan logging di file log (diimplementasikan pada tingkat yang sangat tinggi). Yang tidak saya sukai adalah selalu mendengar tentang "halaman putih". Saya melakukan banyak pemeriksaan dan deklarasi dalam kode saya untuk menghindari ini: tetapi ketika seseorang melewati nol alih-alih objek ke fungsi saya, Tuhan melarang bahwa PHP dapat pulih dari bencana seperti itu tanpa membuat saya melakukan is_null () sendiri. Tentu ini kesalahan, sepertinya konyol bahwa sebagian besar bahasa lain menyebut ini NullReferenceError/Exception yang dapat ditangani dan disajikan dengan lebih dari sekedar layar putih.

    Paling tidak, berhenti menambahkan kesalahan fatal. Saya memiliki kemampuan untuk meningkatkan banyak server yang menjalankan PHP 5.2, tapi saya tidak bisa: karena saya tidak punya waktu untuk memeriksa ~ 200 situs di setiap server untuk memperbaiki kode lama Semakin sedikit kesalahan fatal baru yang Anda tambahkan, semakin besar kemungkinan Anda dapat membuat orang bergabung dengan versi baru PHP.

    Hapus sebanyak mungkin kesalahan fatal dari bahasa. PHP seharusnya merupakan bahasa yang dinamis: mengapa setiap bahasa lain dapat pulih dari sebagian besar kesalahan PHP dianggap fatal? Programer dapat mengatasi kesalahan, tetapi tidak jika Program mati secara paksa setelah apa yang sebagian besar bahasa anggap sebagai NullReferenceException.

  17. Buat pengecualian dilanjutkan. Jadi kita bisa lebih mudah mencampurkan pengecualian dan kesalahan.

  18. (Yang paling memakan waktu dan tidak mungkin) Pisahkan diskusi bahasa, API/modul diskusi, dan diskusi juru bahasa. Mereka seharusnya tidak begitu terintegrasi seperti sekarang. Masalah dengan penerjemah saat ini harus dipecahkan terakhir. Pypy/Parrot/JVM semuanya mendukung berbagai bahasa. V8 tidak, tetapi cukup cepat sehingga beberapa bekerja untuk mengkompilasi bahasa lain ke JavaScript untuk dijalankan pada V8 dan memanfaatkan kemampuannya.

    Sebagai penerjemah/runtime/vm, tujuan pengembangan sedikit berbeda dari bahasa. Dengan PHP, rasanya seolah-olah mereka satu sama. Jadi orang yang mencoba mengembangkan penerjemah lain mengalami kesulitan mengikuti diskusi ketika semua diskusi desain-bahasa bercampur dengan diskusi penerjemah-PHP.

    Sebagai penerjemah, saya merasa bahwa semakin banyak bahasa yang didukung oleh penerjemah, semakin baik. Mengapa kita tidak bisa memiliki skrip <? Python atau <? Javascript atau <?. Saya bosan menulis ulang kode dalam bahasa lain sehingga saya dapat menggunakannya di sana. Beberapa sudah mencoba melakukan ini, kemungkinan akan mengumpulkan dukungan dari daerah lain di komunitas.

1
Reece45

Fitur nomor satu saya adalah

operator kelebihan muatan

Menurut pendapat saya, satu fitur berulang yang diminta di sini, yaitu tipe asli sebagai objek, dapat diperbaiki dengan membuat kelas wrapper Anda sendiri. Saya telah mengembangkan untuk proyek saya objek arrayData, objek stringData, objek intData, dan seterusnya ... Ini menyelesaikan:

  • Pengetikan yang kuat: karena itu adalah kelas khusus, mereka dapat ditegakkan
  • Ketik overloading: Saya bisa menambahkan metode apa pun yang saya butuhkan ke kelas arrayData saya
  • Jenis konversi: masing-masing kelas saya memiliki -> toArray (), -> toInt (), -> __ toString () metode, dan sebagainya
  • html melarikan diri di templat (string adalah kelas userStringData yang memperluas kelas stringData).
  • nilai selalu dilewatkan dengan referensi kecuali diinstruksikan sebaliknya
  • membuat intData ('string') melempar pengecualian.
  • dll (daftar manfaatnya masih sangat panjang)

Imho, ini lebih bermanfaat daripada jenis asli sebagai objek, karena Anda dapat memiliki jumlah metode yang tepat yang Anda butuhkan, dan memanggilnya sesuai keinginan Anda.

Tapi yang sangat saya lewatkan adalah kemampuan untuk menggunakan operator asli pada objek saya. Saya dapat menggunakan operator [] berkat arrayAccess. Tapi saya tidak bisa menggunakan "+", "-", dll. Jika saya bisa, maka saya bisa melakukan stringData + stringData (setara dengan $ string. $ String), atau stringData-stringData (setara dengan str_replace ($ str, ' ', $ string)), atau bandingkan tipeku dengan ">" dan "<=" ...
Implementasi saya saat ini menggunakan $ intData-> add ($ n), $ intData-> subtract ($ n), dan sebagainya. Tidak praktis, khususnya dalam fungsi di mana Anda bisa mengharapkan objek asli atau objek intData. Yang berarti saya harus memeriksa dengan instanceOf di dalam setiap fungsi.

Dengan kata lain, meskipun kelas saya siap, dioptimalkan dan Nice, sampai saya dapat membebani operator, mereka tidak lebih dari bukti konsep. Menggunakannya dalam proyek aktual itu menjengkelkan.

0
Xananax

Paparkan jumlah referensi zval. (Ya, kita bisa menggunakan xdebug_debug_zval , tetapi mengaktifkan Xdebug di situs langsung, ick.) Use case: toko objek rekaman aktif - Anda memiliki model yang sesuai dengan sumber daya eksternal (seperti baris basis data), dan bertanggung jawab untuk memodifikasi sumber daya tersebut. Memiliki dua representasi objek terpisah untuk sumber daya yang sama akan menjadi buruk (kehilangan data karena penulisan yang saling bertentangan dan sebagainya), jadi kita memerlukan semacam cache yang dapat mengembalikan model untuk sumber daya yang diminta jika sudah dimuat. Akan tetapi, itu akan mematikan pengumpulan sampah: referensi terakhir ke objek model akan selalu tetap ada dalam cache, jadi iterasi melalui serangkaian besar sumber daya seperti permintaan DB besar atau direktori besar akan cepat menghabiskan memori. Ini bisa dihindari jika objek toko dapat memeriksa apakah hanya ada satu referensi ke objek yang disimpan (toko itu sendiri) dan menghancurkannya jika itu yang terjadi.

0
Tgr

Saya perlu beberapa fitur erlang di php:

  • memuat kode panas
  • atom
  • pencocokan pola (termasuk nama fungsi, pernyataan pencocokan seperti: kasus)

Bekerja dengan bytecode: menyimpan, memuat, menghapus dan sebagainya ...

Sistem penyematan fleksibel

0
Dan

Saya suka kemajuan dan skalabilitas php dalam beberapa hari terakhir.

Fitur-fitur baru yang diperkenalkan di Java hanya membuat hal-hal yang kompleks daripada membuatnya menjadi sederhana.

request 1: fasilitas db-connection-pool sebagai perpustakaan tambahan.

permintaan 2:

Saya meminta reverse ajax atau pemrograman komet atau fasilitas RTMP sebagai built in library. Ini sudah dikembangkan untuk .net, Java, python dan Perl oleh yayasan dojo

Kami memiliki hal serupa di php tetapi bukan solusi lengkap.

  1. Juga ada dukungan untuk pola pengamat di SPL. tetapi tidak didokumentasikan dengan baik.
  2. Kerangka kerja Xajax (bagus tetapi membutuhkan desain ulang aplikasi)

selamat tinggal untuk sekarang.

0
Shashank

beberapa hal yang akan membuat saya senang

  • Konvensi penamaan yang bagus untuk fungsi bawaan.
  • Ketikkan petunjuk untuk string dan angka
  • Kembalikan isyarat tipe
  • E_STRICT aktif secara default
  • Ciri, campuran, & pewarisan berganda
  • Semuanya adalah objek (mis. Kemurnian mirip-Ruby)
  • Tambahkan :: dukungan ke ruang nama
  • Dukungan windows yang lebih baik
  • Menguji di luar kotak
  • Dokumentasi yang lebih baik untuk underworking dari exec ()
  • Desain ulang php.net dengan pencarian langsung
  • Xdebug menyukai fungsionalitas di luar kotak
  • Peningkatan PEAR portabilitas - pengguna permata Ruby harus tahu
0
Grayson

Saya benar-benar ingin memiliki anotasi .. afaik bahwa RFC telah dijatuhkan.

0
crystal88_
  • Dukungan UTF-8
  • Jadikan bahasanya sepenuhnya OO, pinjam konsep Ruby dan Python bahwa semuanya adalah objek. Saya suka rfc autoboxing. Namun itu memberi terlalu banyak kebebasan untuk para pengembang yang tidak begitu baik, tetapi dengan beberapa keterbatasan itu bisa menjadi tambahan yang bagus untuk evolusi bahasa.

$ x = array (5, 60, 50, 50); $ x-> map (fungsi ($ i) {return $ i * 2;}) -> Push (10);

$ p = "some string"; $ q = $ p-> substring (0, 10);

dll.

Menurut pendapat saya ini dapat dilakukan tanpa melanggar fungsi global saat ini. Namun, sebagian besar dari mereka akan menjadi tidak berguna dan dapat ditinggalkan seiring waktu.

  • Notasi singkat untuk array adalah Nice, tetapi tidak penting untuk bahasa.
0
Josh Scott

Akan menyenangkan untuk dapat menggunakan kelas yang memperluas iterable di loop foreach, di mana Anda memberikan referensi ke loop:

 foreach (& $ myclass as $ me) {
 echo $ me; 
} 

Saya belum menghabiskan banyak waktu untuk mencari tahu mengapa itu saat ini tidak berhasil, mungkin itu terkait dengan bagaimana iterables bekerja, saya belum menyelidiki lebih dari sekadar memperhatikan bahwa itu tidak bekerja.

0
gabe.

Panggilan fungsi lebih cepat

Kami memiliki call_user_func($f,$a1,$aN), tetapi telah digantikan dengan $f($a1,$aN). Namun, tidak ada hal seperti itu untuk call_user_func_array($f,$args).

Proposal saya adalah membuat sintaks bahasa spesifik untuk ini, seperti $f{$args}. Alasan setiap orang harus menjauh satu mil dari call_user_func* Adalah karena mereka sangat lambat dan terlihat buruk dalam arti ada alternatif yang lebih baik.

sintaks deklarasi objek

Saat ini, untuk membuat objek dengan cepat, Anda memerlukan: (object)array('prop'=>'value');. Dengan konvensi, kita juga harus memiliki object('prop'=>'value');. Juga, sintaks pendek akan berguna, mirip dengan JSON.

Metode ajaib untuk semua jenis

Saat ini, kami memiliki __toString(), dan banyak yang menyarankan __toInt/__toFloat/Etc. Saran saya adalah mengimplementasikan __toType() atau __typecast(), yang sebagai parameter pertama, tipe data yang diinginkan diteruskan, misalnya:

class Test {
    public function __toType($type){
        switch($type){
            case 'integer':
                return (int)$this->age;
            case 'string':
                return $this->age.' years';
            default:
                throw new EUnsupportedTypeException();
        }
    }
}

Jika kita ingin lebih spesifik, kita bisa menambahkan argumen lain setelah $ type, yaitu $ class. Jadi Anda dapat: if($class=='person')return new Person($this->age);

Menentukan Tipe Data dalam foreach

Saat ini, Anda dapat menentukan tipe data dari argumen fungsi PHP, seperti:

public function say_hello_to(UserClass $user){
    $this->say('Hello, '.$user->name.'!');
}

Akan sangat bagus untuk melakukan ini di muka juga:

public function on_enter_office(){
    foreach($users as UserClass $user) // <- See UserClass here?
        $user>say_hello_to($this);
}

"Perbaikan" saat ini menggunakan penutupan, seperti:

public function on_enter_office(){
    $users->each(function(UserClass $user){
        $user>say_hello_to($this);
    });
}

Perbaikan membutuhkan lebih banyak sumber daya, lebih banyak menulis dan mengacaukan ruang lingkup, karenanya mengapa solusi asli akan membuatnya lebih mudah, lebih bersih dan mungkin lebih cepat daripada perbaikan saat ini.

Definisi Bersyarat

Ini mungkin tidak akan menjadi fitur yang berguna bagi banyak orang, tetapi ini adalah cara yang bagus untuk menjaga agar kode yang berjalan tetap minimum bahkan ketika itu kompatibel dengan sistem lama, membuat eksekusi lebih cepat. Pertimbangkan kode berikut:

if (! function_exists ('json_encode')) {function json_encode ($ value, $ options = 0) {// kode lawas}}

  • Bagian // legacy code Masih diuraikan, maka setiap kesalahan di sana akan menyebabkan PHP untuk berhenti.
  • Parsing itu juga membuat PHP lebih lambat, bahkan jika itu tidak membutuhkannya sama sekali.
  • Kode ini tidak intuitif untuk pengembang
  • Setiap IDE mesin parsing akan menjadi bingung karena mereka mengabaikan pernyataan dan akhirnya membuat daftar fungsi dua kali.

Memperbaiki? Kompilasi bersyarat:

#if PHP_VERSION<5.2
function json_encode($value, $options=0){
    // legacy code
}
#endif
0
Christian

termasuk dukungan hypertext-link yang lebih baik, yaitu fungsi/metode-kelas yang dapat digunakan untuk mengubah browser saat ini. atau untuk membuat yang benar-benar baru. menggunakan $ _SERVER ['REQUEST_URI'] || $ _SERVER ['PATH_INFO'] untuk memahami sumber daya yang diminta. Ini mungkin membuat sesuatu seperti mengembangkan REST-apps lebih mudah. (menurut UriScheme rfc dan implementasi skema default-nya, mungkin memungkinkan untuk mengimplementasikan UriSchemes lain yang memperpanjang UriBase)

Berikan sesuatu seperti kelas UriResource, memungkinkan permintaan potongan fungsionalitas kecil dengan cara yang juga bisa menguntungkan permintaan http dari klien.

Buat fungsi yang dapat dipanggil sebelum dan sesudah templat, memungkinkan tag pendek antara dua panggilan fungsi tersebut. Di antara fungsi-fungsi tersebut, satu-satunya variabel yang tersedia adalah variabel yang diteruskan ke fungsi-panggilan pertama (sebagai array asosiatif (menggunakan ekstrak)). Ini mungkin memudahkan pengembangan template di php itu sendiri (tanpa kerangka kerja). No-framework PHP MVC framework

Semua dalam semua saya pikir banyak kerangka kerja php di luar sana memiliki kesamaan tertentu yang dapat dengan mudah diintegrasikan ke dalam php dengan cara yang umum.

tapi whoami :)

0
immeëmosol
  1. Objek nilai yang tidak dapat diubah
  2. Kelas anonim dan/atau kelas sebagai objek
  3. Objek bawaan setara dengan tipe data string (disebutkan sebelumnya)
  4. Anotasi atau dekorator mirip-Python
  5. Benda singleton seperti di Scala
  6. Kesalahan default sebagai pengecualian (disebutkan sebelumnya)
  7. Dukungan UTF8
  8. Penghapusan global dll
  9. Prinsip akses terpadu - satu cara untuk memanggil metode objek dan memanipulasi properites (lihat Scala)
0
sokzzuka