Saya tahu ini kedengarannya seperti pertanyaan pelacur tapi biarkan saya menjelaskan dari mana saya berasal.
Keluar dari perguruan tinggi saya mendapat pekerjaan di sebuah toko PHP. Saya bekerja di sana selama satu setengah tahun dan berpikir bahwa saya telah belajar semua yang ada untuk belajar tentang pemrograman.
Kemudian saya mendapat pekerjaan sebagai toko pengembangan internal satu orang di sebuah perusahaan yang cukup besar di mana semua pekerjaan berada di C #. Dalam komitmen saya pada posisi itu, saya mulai membaca banyak blog dan buku dan dengan cepat menyadari betapa salahnya saya dengan berpikir saya tahu segalanya. Saya belajar tentang pengujian unit, injeksi ketergantungan dan pola dekorator, prinsip desain kopling longgar, komposisi debat warisan, dan seterusnya dan seterusnya - saya masih sangat menyerap semuanya. Tidak perlu dikatakan gaya pemrograman saya telah berubah seluruhnya dalam setahun terakhir.
Sekarang saya menemukan diri saya mengambil proyek php melakukan beberapa pengkodean untuk teman start-up dan saya merasa benar-benar dibatasi sebagai lawan pemrograman di C #. Sangat mengganggu saya bahwa semua variabel pada ruang lingkup kelas harus dirujuk dengan menambahkan '$ this->'. Ini mengganggu saya bahwa tidak ada IDE yang saya coba memiliki intellisense yang sangat baik dan metode unit SimpleTest saya harus mulai dengan kata 'test'. Ini membuat saya gila bahwa pengetikan dinamis membuat saya tidak menentukan secara implisit parameter mana yang diharapkan dari suatu metode, dan bahwa Anda harus menulis pernyataan switch untuk melakukan overload metode. Saya tidak tahan bahwa Anda tidak dapat memiliki ruang nama bersarang dan harus menggunakan operator :: untuk memanggil konstruktor kelas dasar.
Sekarang saya tidak punya niat memulai debat PHP vs C #, tapi yang ingin saya katakan adalah bahwa saya yakin ada beberapa fitur PHP yang entah tidak saya ketahui atau ketahui gagal digunakan dengan benar. Saya berada di alam semesta C # dan mengalami kesulitan melihat di luar mangkuk kaca.
Jadi saya bertanya, apa saja fitur favorit Anda dari PHP? Apa hal yang dapat Anda lakukan di dalamnya yang tidak dapat atau lebih sulit dalam bahasa .Net?
sumber
Jawaban:
Dokumentasi . The dokumentasi mendapatkan suara saya. Saya belum menemukan dokumentasi daring yang lebih menyeluruh untuk bahasa pemrograman - semua yang lain harus saya kumpulkan dari berbagai situs web dan halaman manual.
sumber
Array . Menilai dari jawaban atas pertanyaan ini, saya kira orang tidak sepenuhnya menghargai betapa mudah dan bermanfaatnya Arays di PHP. Array PHP bertindak sebagai daftar, peta, tumpukan, dan struktur data umum semuanya secara bersamaan. Array diimplementasikan dalam inti bahasa dan digunakan di semua tempat yang menghasilkan lokalitas cache CPU yang baik. Perl dan Python menggunakan konstruksi bahasa yang terpisah untuk daftar dan peta yang menghasilkan lebih banyak penyalinan dan transformasi yang berpotensi membingungkan.
sumber
[[1, 2], [3, 4]]
, bandingkan dengan versi PHP:array(array(1, 2), array(3, 4))
.Stream Handler memungkinkan Anda untuk memperluas "FileSystem" dengan logika yang sejauh yang saya tahu cukup sulit dilakukan di sebagian besar bahasa lain.
Misalnya dengan handler MS-Excel Stream Anda dapat membuat file MS Excel dengan cara berikut:
sumber
Metode Ajaib adalah metode fall-through yang dipanggil setiap kali Anda memanggil metode yang tidak ada atau menetapkan atau membaca properti yang tidak ada, antara lain.
Pengembang C ++ di sini mungkin memperhatikan, bahwa PHP memungkinkan kelebihan beberapa operator, misalnya
()
atau(string)
. Sebenarnya PHP memungkinkan overloading lebih banyak lagi, misalnya[]
operator ( ArrayAccess ),foreach
konstruksi bahasa ( Iterator dan IteratorAggregate ) dancount
fungsinya (Dapat Dihitung ).sumber
__call()
besar dalam kerangka kerja dengan peta domain.com/controller/method/Kelas standar adalah wadah yang rapi. Saya hanya mempelajarinya baru-baru ini.
Alih-alih menggunakan array untuk menyimpan atribut serveral
Anda dapat menggunakan kelas standar
Ini sangat membantu ketika mengakses variabel-variabel ini dalam sebuah string
sumber
Sertakan file dapat memiliki nilai balik yang dapat Anda tetapkan ke variabel.
sumber
Anda dapat memanfaatkan fakta bahwa
or
operator memiliki prioritas lebih rendah daripada=
melakukan ini:Jika nilai penugasan pertama dievaluasi
true
, penugasan kedua diabaikan. Contoh lain:sumber
or
akan mengeksekusi jika kode sebelumor
menghasilkan nilai numerik0
. Jadi semantik mungkin kurang mungkin dengan sesuatu seperti$_GET['page']
, tetapi jelas keadaan mungkin muncul dan ada baiknya diwaspadai.or
operator adalah versi yang lebih rendah dari||
operator. Juga, +1 karena ini sangat ekspresif dan saya sering lupa itu mungkin. Itu harus digunakan lebih sering, dan itu benar-benar jelas dalam apa fungsinya. Saya tidak tahu tentang bagaimana "pria sejati" kode, jadi saya tidak bisa mengomentari itu.__autoload()
(kelas-) file dibantu olehset_include_path()
.Dalam PHP5 sekarang tidak perlu menentukan daftar panjang pernyataan "include_once" saat melakukan OOP yang layak.
Cukup tentukan sekumpulan direktori kecil di mana file library-class terstruktur secara waras, dan atur jalur auto include:
Sekarang
__autoload()
rutinitas:Sekarang PHP akan secara otomatis memasukkan file yang dibutuhkan sesuai permintaan, menghemat waktu dan memori parsing.
sumber
Kemudahan . Fitur terbesar adalah betapa mudahnya bagi pengembang baru untuk duduk dan menulis skrip "yang berfungsi" dan memahami kodenya.
Fitur terburuk adalah betapa mudahnya bagi pengembang baru untuk duduk dan menulis skrip "yang berfungsi" dan berpikir mereka memahami kodenya.
The keterbukaan masyarakat sekitarnya PHP dan sejumlah besar proyek-proyek PHP tersedia sebagai open-source yang jauh lebih menakutkan bagi seseorang memasuki dunia pengembangan dan seperti Anda, bisa menjadi batu loncatan ke lebih matang bahasa.
Saya tidak akan memperdebatkan hal-hal teknis seperti sebelum saya miliki, tetapi jika Anda melihat PHP sebagai komunitas daripada bahasa web, sebuah komunitas yang jelas merangkul Anda ketika Anda mulai berkembang, manfaatnya benar-benar berbicara sendiri.
sumber
Variabel variabel dan fungsi tanpa keraguan!
Konsep yang sama berlaku untuk parameter objek ($ some_object -> $ some_variable);
Sangat sangat bagus. Membuat kode dengan loop dan pola sangat mudah, dan lebih cepat dan lebih terkendali daripada eval (Thanx @Ross & @Joshi Spawnbrood!). T
sumber
Anda dapat menggunakan fungsi dengan jumlah argumen yang tidak ditentukan menggunakan
func_get_args()
.sumber
Saya suka file jarak jauh . Untuk pengembangan web, fitur semacam ini sangat berguna.
Perlu bekerja dengan konten halaman web? Sederhana
dan Anda sudah punya file menangani siap untuk pergi, sama seperti file normal lainnya.
Atau bagaimana dengan membaca file jarak jauh atau halaman web secara langsung ke sebuah string?
Kegunaan metode khusus ini sulit untuk dilebih-lebihkan.
Ingin menganalisis gambar jarak jauh? Bagaimana kalau melakukannya melalui FTP?
Hampir semua fungsi PHP yang berfungsi dengan file dapat bekerja dengan file jarak jauh. Anda bahkan dapat
include()
ataurequire()
kode file jarak jauh dengan cara ini.sumber
strtr ()
Ini sangat cepat, sangat banyak sehingga Anda akan kagum. Secara internal mungkin menggunakan beberapa struktur tipe b-tree gila untuk mengatur pertandingan Anda dengan awalan umum mereka. Saya menggunakannya dengan lebih dari 200 menemukan dan mengganti string dan masih melewati 1MB dalam waktu kurang dari 100 ms. Untuk semua kecuali string strtr () yang sangat kecil, bahkan jauh lebih cepat daripada strtolower () dalam melakukan hal yang persis sama, bahkan dengan mempertimbangkan karakter yang diperhitungkan. Anda mungkin bisa menulis parser seluruh menggunakan panggilan strtr berturut-turut dan itu akan lebih cepat dari pencocokan ekspresi reguler biasa, mencari tahu jenis token, output ini atau itu, jenis ekspresi reguler berikutnya.
Saya sedang menulis normaliser teks untuk memisahkan teks menjadi kata-kata, menurunkan, menghapus tanda baca dll dan strtr adalah pisau tentara Swiss saya, itu mengalahkan celana dari ekspresi reguler atau bahkan str_replace ().
sumber
Salah satu fitur PHP yang tidak begitu terkenal adalah
extract()
, fungsi yang membongkar array asosiatif ke dalam namespace lokal. Ini mungkin ada untuk aborminasi autoglobal tetapi sangat berguna untuk templating:Sekarang Anda dapat menggunakan
render_template('index.html', array('foo' => 'bar'))
dan hanya$foo
dengan nilai yang"bar"
muncul di template.sumber
Range () tidak tersembunyi per se, tetapi saya masih melihat banyak orang yang mengulangi dengan:
kapan mereka bisa menggunakan:
Dan Anda dapat melakukan hal-hal sederhana seperti
sumber
Read Loop
.PHP webspace yang diaktifkan biasanya lebih murah daripada sesuatu dengan (asp) .net. Anda mungkin menyebutnya fitur ;-)
sumber
Kata
static
kunci berguna di luar sudut pandang OOP. Anda dapat dengan cepat dan mudah menerapkan 'memoisasi' atau fungsi caching dengan sesuatu yang sederhana seperti:Kata
static
kunci membuat variabel yang hanya bertahan dalam lingkup fungsi yang melewati eksekusi. Teknik ini sangat bagus untuk fungsi-fungsi yang seperti databaseget_all_books_by_id(...)
atauget_all_categories(...)
Anda akan menelepon lebih dari satu kali selama memuat halaman.Peringatan: Pastikan Anda menemukan cara terbaik untuk membuat kunci untuk hash Anda, dalam hampir setiap keadaan di
md5(...)
atas BUKAN keputusan yang baik (masalah kecepatan dan panjang keluaran), saya menggunakannya untuk tujuan ilustrasi.sprintf('%u', crc32(...))
atauspl_object_hash(...)
mungkin jauh lebih baik tergantung pada konteksnya.sumber
Salah satu fitur bagus PHP adalah CLI . Tidak begitu "dipromosikan" dalam dokumentasi tetapi jika Anda memerlukan skrip / aplikasi konsol rutin, menggunakan cron + php cli sangat cepat untuk dikembangkan!
sumber
wget http://example.com...
Lalu trik "dan cetak"
Akan menggema Blah jika $ flag benar. TIDAK BEKERJA DENGAN ECHO.
Ini sangat berguna dalam templat dan ganti? : yang tidak mudah dibaca.
sumber
Anda dapat menggunakan karakter minus dalam nama variabel seperti ini:
Kenapa menggunakannya? Tidak tahu: mungkin untuk model CSS? Atau beberapa JSON aneh yang perlu Anda hasilkan. Ini fitur yang aneh :)
sumber
$item->DataContent->body->{'body.content'}
.Sintaks HEREDOC adalah fitur tersembunyi favorit saya. Selalu sulit ditemukan karena Anda tidak dapat Google untuk <<< tetapi berhenti Anda harus keluar dari HTML besar dan masih memungkinkan Anda untuk menjatuhkan variabel ke dalam aliran.
sumber
Mungkin tidak banyak yang tahu bahwa adalah mungkin untuk menentukan "variabel" konstan sebagai nilai default untuk parameter fungsi:
String dapat digunakan seolah- olah mereka adalah array :
sumber
Satu-satunya hal yang paling berguna tentang kode PHP adalah bahwa jika saya tidak begitu mengerti fungsi, saya tahu saya bisa mencarinya dengan menggunakan browser dan mengetik:
Bulan lalu saya melihat fungsi "range" dalam beberapa kode. Ini adalah salah satu dari ratusan fungsi yang saya berhasil tidak pernah gunakan tetapi ternyata sangat berguna:
Url itu adalah alias untuk http://us2.php.net/manual/en/function.range.php . Gagasan sederhana itu, tentang pemetaan fungsi dan kata kunci untuk url , mengagumkan.
Saya berharap bahasa lain, kerangka kerja, database, sistem operasi memiliki mekanisme sederhana untuk mencari dokumentasi.
sumber
range()
dapat bermanfaat untukforeach( range(1, 10) as $i) { };
PHP function
bilah alamat itu akan melakukan pencarian Google 'Saya merasa beruntung' dan Anda hampir selalu berakhir di halaman dokumentasi php yang tepat.Cekal komentar cepat
Komentar ini memungkinkan Anda untuk beralih jika blok kode dikomentari dengan satu karakter.
sumber
// ...
komentar garis dan/* ... */
memblokir komentar./** /
sebelum dan/**/
sesudah. Anda dapat beralih blok dengan menghapus dan menambahkan ruang di yang pertama. Ini memiliki manfaat tambahan untuk bekerja dengan CSS (dan bahasa lain yang tidak mendukung// ...
komentar).Daftar saya .. kebanyakan dari mereka lebih banyak berada di bawah "fitur tersembunyi" daripada "fitur favorit" (saya harap!), Dan tidak semua berguna, tapi .. yeah.
Anda dapat membuat sarang operator ternary juga, terkadang berguna.
Benar, saya akan berhenti untuk sekarang :-)
Hmm, sudah lama ..
Jadi, baru saja ditemukan Anda dapat melewatkan string apa pun sebagai nama metode JIKA Anda melampirkannya dengan kurung keriting. Anda tidak dapat mendefinisikan string apa pun sebagai metode, tetapi Anda dapat menangkapnya dengan __call (), dan memprosesnya lebih lanjut sesuai kebutuhan. Hmmm....
Menemukan permata kecil ini di komentar Reddit:
Anda tidak dapat memanggil fungsi di dalam {} secara langsung seperti ini, tetapi Anda dapat menggunakan variabel-holding-the-function-name dan memanggilnya! (* dan * Anda juga dapat menggunakan variabel variabel)
sumber
${''} = 456;
hahaha .... cukup pelecehan.Manipulasi array.
Banyak alat untuk bekerja dengan dan memanipulasi array. Ini mungkin tidak unik untuk PHP, tapi saya belum pernah bekerja dengan bahasa yang membuatnya sangat mudah.
sumber
Saya sedikit seperti Anda, saya sudah mengode PHP selama lebih dari 8 tahun. Saya harus mengambil kursus .NET / C # sekitar setahun yang lalu dan saya benar-benar menikmati bahasa C # (benci ASP.NET) tetapi itu membuat saya menjadi pengembang PHP yang lebih baik.
PHP sebagai bahasa sangat buruk, tapi, saya sangat cepat dengan itu dan tumpukan LAMP mengagumkan. Produk akhir jauh melebihi jumlah bagian-bagiannya.
Yang mengatakan, dalam menjawab pertanyaan Anda:
http://uk.php.net/SPL
Saya suka SPL , kelas koleksi di C # adalah sesuatu yang saya sukai segera setelah saya mulai dengan itu. Sekarang saya dapat memiliki kue dan memakannya.
Andrew
sumber
Saya sedikit terkejut belum ada yang menyebutkannya, tetapi salah satu trik favorit saya dengan array menggunakan operator plus. Ini sedikit seperti
array_merge()
tetapi sedikit lebih sederhana. Saya telah menemukan itu biasanya apa yang saya inginkan. Akibatnya, dibutuhkan semua entri dalam RHS dan membuatnya muncul dalam salinan LHS, ditimpa sesuai kebutuhan (yaitu tidak komutatif). Sangat berguna untuk memulai dengan array "default" dan menambahkan beberapa nilai nyata semua dalam satu hit, sementara meninggalkan nilai default di tempat untuk nilai yang tidak disediakan.Contoh kode yang diminta:
sumber
$defaults
seharusnya$control_defaults
... + array( ...
tidak cukup untuk menunjukkan hal ini? :-)Ini satu, saya suka bagaimana menetapkan nilai default pada parameter fungsi yang tidak disediakan jauh lebih mudah:
sumber
Cepat dan kotor adalah standarnya.
Bahasa ini diisi dengan pintasan yang berguna, Ini menjadikan PHP kandidat yang tepat untuk proyek (kecil) yang memiliki waktu pemasaran yang singkat. Bukan berarti kode PHP yang bersih tidak mungkin, hanya butuh sedikit usaha dan pengalaman.
Tapi saya suka PHP karena memungkinkan saya mengekspresikan apa yang saya inginkan tanpa mengetik esai.
PHP:
JAWA:
Dan ya, itu termasuk tidak mengetik Int .
sumber
//
dibangun ke dalam bahasa.