PHP membuatnya relatif mudah untuk membangun sistem berbasis web, yang menjadi alasan popularitasnya. Namun meskipun mudah digunakan, PHP telah berkembang menjadi bahasa yang cukup canggih, dengan banyak nuansa dan kehalusan yang dapat menggigit pengembang, yang menyebabkan berjam-jam proses debug yang melelahkan. Artikel ini menyoroti sepuluh kesalahan umum yang perlu diwaspadai oleh pengembang PHP Show
Oleh Ilya Sanosian Ilya adalah konsultan IT, arsitek web, dan manajer dengan pengalaman lebih dari 12 tahun membangun dan memimpin tim BAGIKAN BAGIKAN PHP membuatnya relatif mudah untuk membangun sistem berbasis web, yang menjadi alasan popularitasnya. Namun meskipun mudah digunakan, PHP telah berkembang menjadi bahasa yang cukup canggih dengan banyak kerangka kerja, nuansa, dan seluk-beluk yang dapat menggigit pengembang, yang menyebabkan proses debug yang melelahkan selama berjam-jam. Artikel ini menyoroti sepuluh kesalahan umum yang perlu diwaspadai oleh pengembang PHP Kesalahan Umum #1. Meninggalkan referensi array yang menggantung setelah $data = fetchRecordFromStorage($storage, $identifier); if (!isset($data['keyShouldBeSet']) { // do something here if 'keyShouldBeSet' is not set } 5 loopTidak yakin bagaimana cara menggunakan foreach loop di PHP? . Sebagai contoh
Masalahnya adalah, jika Anda tidak berhati-hati, ini juga dapat menimbulkan beberapa efek samping dan konsekuensi yang tidak diinginkan. Secara khusus, dalam contoh di atas, setelah kode dieksekusi, 7 akan tetap berada dalam ruang lingkup dan akan menyimpan referensi ke elemen terakhir dalam larik. Operasi selanjutnya yang melibatkan _7 dapat secara tidak sengaja berakhir dengan memodifikasi elemen terakhir dalam larikHal utama yang perlu diingat adalah bahwa 5 tidak membuat ruang lingkup. Jadi, 7 dalam contoh di atas adalah referensi dalam cakupan teratas skrip. Pada setiap iterasi 5 atur referensi untuk menunjuk ke elemen berikutnya dari 2. Setelah loop selesai, oleh karena itu, 7 masih menunjuk ke elemen terakhir dari 2 dan tetap dalam cakupanBerikut adalah contoh jenis bug yang mengelak dan membingungkan yang dapat ditimbulkannya
Kode di atas akan menampilkan yang berikut ini
Tidak, itu bukan salah ketik. Nilai terakhir pada baris terakhir memang 2, bukan 3 Mengapa? Setelah melalui 5 loop pertama, 2 tetap tidak berubah tetapi, seperti yang dijelaskan di atas, 7 dibiarkan sebagai referensi menggantung ke elemen terakhir di 2 (sejak 5 loop diakses 7 melalui referensi)Akibatnya, saat kita melalui putaran 5 kedua, "hal-hal aneh" tampaknya terjadi. Secara khusus, karena _7 sekarang sedang diakses oleh nilai (i. e. , dengan salinan), _5 menyalin setiap elemen 2 berurutan menjadi 7 di setiap langkah loop. Akibatnya, inilah yang terjadi selama setiap langkah 5 putaran kedua
Untuk tetap mendapatkan manfaat menggunakan referensi dalam 5 loop tanpa menanggung risiko masalah semacam ini, panggil 3 pada variabel, segera setelah 5 loop, untuk menghapus referensi; . g
Kesalahan Umum #2. Kesalahpahaman if (array_key_exists('varShouldBeSet', get_defined_vars())) { // variable $varShouldBeSet exists in current scope } 5 perilakuTerlepas dari namanya, _5 tidak hanya mengembalikan false jika item tidak ada, tetapi juga mengembalikan 7 untuk 8 nilaiPerilaku ini lebih bermasalah daripada yang terlihat pada awalnya dan merupakan sumber masalah yang umum Pertimbangkan yang berikut ini
Penulis kode ini mungkin ingin memeriksa apakah 9 telah ditetapkan di 0. Namun, seperti yang telah dibahas, _1 juga akan menghasilkan false jika 2 telah disetel, tetapi disetel ke 8. Jadi logika di atas cacatIni contoh lainnya _Kode di atas mengasumsikan bahwa jika _4 mengembalikan 5, maka 6 harus ditetapkan, dan oleh karena itu 7 akan mengembalikan 5. Sebaliknya, kode di atas mengasumsikan bahwa satu-satunya cara 7 akan mengembalikan 7 adalah jika 4 mengembalikan 7 jugaBukan Seperti yang dijelaskan, 7 juga akan mengembalikan 7 jika 05 disetel ke 8. Oleh karena itu, _7 dapat mengembalikan 7 bahkan jika 4 dikembalikan 5. Jadi sekali lagi, logika di atas cacatDan omong-omong, sebagai poin tambahan, jika maksud dalam kode di atas benar-benar untuk memeriksa lagi apakah 4 kembali benar, mengandalkan 5 karena ini adalah keputusan pengkodean yang buruk dalam hal apa pun. Sebaliknya, akan lebih baik untuk memeriksa ulang 4; . e
Namun, untuk kasus-kasus, di mana penting untuk memeriksa apakah suatu variabel benar-benar disetel (mis. e. , untuk membedakan antara variabel yang tidak disetel dan variabel yang disetel ke 8), metode 15 adalah solusi yang jauh lebih kuatMisalnya, kita dapat menulis ulang yang pertama dari dua contoh di atas sebagai berikut
Selain itu, dengan menggabungkan 15 dengan 17, kita dapat memeriksa dengan andal apakah variabel dalam lingkup saat ini telah ditetapkan atau tidak
Kesalahan Umum #3. Kebingungan tentang kembali dengan referensi vs. berdasarkan nilaiPertimbangkan potongan kode ini
Jika Anda menjalankan kode di atas, Anda akan mendapatkan yang berikut _0Apa yang salah? Masalahnya adalah bahwa kode di atas membingungkan mengembalikan array dengan referensi dengan mengembalikan array berdasarkan nilai. Kecuali jika Anda secara eksplisit memberi tahu PHP untuk mengembalikan array dengan referensi (mis. e. , dengan menggunakan _18), PHP secara default akan mengembalikan array "berdasarkan nilai". Ini berarti salinan array akan dikembalikan dan oleh karena itu fungsi yang dipanggil dan pemanggil tidak akan mengakses instance array yang samaJadi panggilan di atas ke _19 mengembalikan salinan array ________11______20 daripada referensi untuk itu. Dengan mengingat hal itu, mari kita tinjau kembali dua baris kunci dari contoh di atas _1Satu kemungkinan perbaikan adalah dengan menyimpan salinan pertama dari larik 20 yang dikembalikan oleh 19 dan kemudian mengoperasikan salinan itu selanjutnya; . g _2Kode itu akan berfungsi dengan baik (mis. e. , itu akan menampilkan _23 tanpa menghasilkan pesan "indeks tidak terdefinisi"), tetapi tergantung pada apa yang ingin Anda capai, pendekatan ini mungkin atau mungkin tidak memadai. Secara khusus, kode di atas tidak akan mengubah larik 20 asli. Jadi jika Anda ingin modifikasi Anda (seperti menambahkan elemen 'test') untuk mempengaruhi array asli, Anda perlu memodifikasi fungsi 19 untuk mengembalikan referensi ke array 20 itu sendiri. Hal ini dilakukan dengan menambahkan 18 sebelum nama fungsi, sehingga menunjukkan bahwa itu harus mengembalikan referensi; . e _3Output dari ini akan menjadi _23, seperti yang diharapkanTetapi untuk membuatnya lebih membingungkan, pertimbangkan potongan kode berikut _4Jika Anda menebak bahwa ini akan menghasilkan kesalahan "indeks tidak terdefinisi" yang sama seperti contoh ________11______29 kami sebelumnya, Anda salah. Faktanya, kode ini akan berfungsi dengan baik. Alasannya adalah, tidak seperti array, PHP selalu mengirimkan objek dengan referensi. ( 30 adalah objek SPL, yang sepenuhnya meniru penggunaan array, tetapi berfungsi sebagai objek. )Seperti yang ditunjukkan contoh-contoh ini, tidak selalu jelas dalam PHP apakah Anda berurusan dengan salinan atau referensi. Oleh karena itu penting untuk memahami perilaku default ini (mis. e. , variabel dan array dilewatkan dengan nilai; Semua yang dikatakan, penting untuk dicatat bahwa praktik mengembalikan referensi ke array atau 30 umumnya adalah sesuatu yang harus dihindari, karena memberikan pemanggil kemampuan untuk mengubah data pribadi instance. Ini "terbang di depan" enkapsulasi. Sebaliknya, lebih baik menggunakan "getter" dan "setter" gaya lama, mis. g _5Pendekatan ini memberi penelepon kemampuan untuk menyetel atau mendapatkan nilai apa pun dalam larik tanpa memberikan akses publik ke larik 20 itu sendiri.Kesalahan Umum #4. Melakukan kueri dalam satu lingkaranTidak jarang menemukan hal seperti ini jika PHP Anda tidak berfungsi _6Meskipun mungkin sama sekali tidak ada yang salah di sini, tetapi jika Anda mengikuti logika dalam kode, Anda mungkin menemukan bahwa panggilan yang tampak tidak bersalah di atas ke 33 pada akhirnya menghasilkan semacam kueri, seperti _7Akibatnya, setiap iterasi dari loop di atas akan menghasilkan kueri terpisah ke database. Jadi jika, misalnya, Anda memberikan larik 1.000 nilai ke loop, itu akan menghasilkan 1.000 kueri terpisah ke sumber daya. Jika skrip semacam itu dipanggil dalam banyak utas, itu berpotensi menghentikan sistem Oleh karena itu, sangat penting untuk mengenali kapan kueri dibuat oleh kode Anda dan, jika memungkinkan, kumpulkan nilai lalu jalankan satu kueri untuk mengambil semua hasil Salah satu contoh tempat yang cukup umum untuk menghadapi kueri yang dilakukan secara tidak efisien (mis. e. , dalam satu lingkaran) adalah saat formulir diposting dengan daftar nilai (ID, misalnya). Kemudian, untuk mengambil data rekaman lengkap untuk setiap ID, kode akan mengulang melalui array dan melakukan kueri SQL terpisah untuk setiap ID. Ini akan sering terlihat seperti ini _8Tetapi hal yang sama dapat dicapai dengan lebih efisien dalam satu kueri SQL sebagai berikut _9Oleh karena itu penting untuk mengenali kapan kueri dibuat, baik secara langsung atau tidak langsung, oleh kode Anda. Jika memungkinkan, kumpulkan nilai lalu jalankan satu kueri untuk mengambil semua hasil. Namun kehati-hatian juga harus dilakukan di sana, yang membawa kita ke kesalahan umum PHP berikutnya… Kesalahan Umum #5. Headfakes penggunaan memori dan inefisiensiMeskipun mengambil banyak record sekaligus jelas lebih efisien daripada menjalankan satu kueri untuk diambil setiap baris, pendekatan seperti itu berpotensi menyebabkan kondisi "kehabisan memori" di 34 saat menggunakan ekstensi 35 PHPUntuk mendemonstrasikan, mari kita lihat kotak uji dengan sumber daya terbatas (RAM 512MB), MySQL, dan 36Kami akan mem-bootstrap tabel database seperti ini 0Oke, sekarang mari kita periksa penggunaan sumber daya 1Keluaran 2Keren. Sepertinya kueri dikelola dengan aman secara internal dalam hal sumber daya Hanya untuk memastikan, mari tingkatkan batasnya sekali lagi dan atur menjadi 100.000. Uh oh. Ketika kita melakukan itu, kita dapatkan 3Apa yang terjadi? Masalahnya di sini adalah cara kerja modul ________11______35 PHP. Ini benar-benar hanya proxy untuk 34, yang melakukan pekerjaan kotor. Ketika sebagian data dipilih, itu langsung masuk ke memori. Karena memori ini tidak dikelola oleh pengelola PHP, 39 tidak akan menunjukkan peningkatan penggunaan sumber daya saat kami mencapai batas dalam kueri kami. Ini mengarah pada masalah seperti yang ditunjukkan di atas di mana kita tertipu untuk berpuas diri dengan berpikir bahwa manajemen ingatan kita baik-baik saja. Namun kenyataannya, manajemen ingatan kita sangat cacat dan kita bisa mengalami masalah seperti yang ditunjukkan di atasAnda setidaknya dapat menghindari headfake di atas (walaupun itu sendiri tidak akan meningkatkan penggunaan memori Anda) dengan menggunakan modul 40. _40 dikompilasi sebagai ekstensi PHP asli dan menggunakan pengelola memori PHPOleh karena itu, jika kita menjalankan pengujian di atas menggunakan 40 daripada 35, kita mendapatkan gambaran yang jauh lebih realistis tentang penggunaan memori kita 4Dan itu bahkan lebih buruk dari itu. Menurut dokumentasi PHP, _35 menggunakan sumber daya dua kali lebih banyak dari 40 untuk menyimpan data, jadi skrip asli yang menggunakan 35 benar-benar menggunakan lebih banyak memori daripada yang ditampilkan di sini (kira-kira dua kali lebih banyak)Untuk menghindari masalah seperti itu, pertimbangkan untuk membatasi ukuran kueri Anda dan menggunakan perulangan dengan sedikit iterasi; . g 5Ketika kami mempertimbangkan kesalahan PHP ini dan di atasnya, kami menyadari bahwa ada keseimbangan yang sehat yang idealnya harus dicapai oleh kode Anda antara, di satu sisi, membuat kueri Anda terlalu terperinci dan berulang, vs. membuat setiap kueri individual Anda terlalu besar. Seperti kebanyakan hal dalam hidup, keseimbangan dibutuhkan; Kesalahan Umum #6. Mengabaikan masalah Unicode/UTF-8Dalam beberapa hal, ini sebenarnya lebih merupakan masalah dalam PHP itu sendiri daripada sesuatu yang akan Anda temui saat men-debug PHP, tetapi tidak pernah ditangani secara memadai. Inti PHP 6 harus dibuat sadar-Unicode, tetapi itu ditunda ketika pengembangan PHP 6 ditangguhkan kembali pada tahun 2010 Tapi itu tidak berarti membebaskan pengembang dari menyerahkan UTF-8 dengan benar dan menghindari asumsi yang salah bahwa semua string akan menjadi "ASCII tua biasa". Kode yang gagal menangani string non-ASCII dengan benar terkenal karena memasukkan heisenbugs degil ke dalam kode Anda. Bahkan panggilan sederhana _47 dapat menyebabkan masalah jika seseorang dengan nama belakang seperti "Schrödinger" mencoba mendaftar ke sistem AndaBerikut daftar periksa kecil untuk menghindari masalah seperti itu dalam kode Anda
Sumber daya yang sangat berharga dalam hal ini adalah UTF-8 Primer untuk PHP dan MySQL yang diposting oleh Francisco Claria di blog ini Kesalahan Umum #7. Dengan asumsi $array = [1, 2, 3]; echo implode(',', $array), "\n"; foreach ($array as &$value) {} // by reference echo implode(',', $array), "\n"; foreach ($array as $value) {} // by value (i.e., copy) echo implode(',', $array), "\n"; _52 akan selalu berisi data POST AndaTerlepas dari namanya, array 52 tidak akan selalu berisi data POST Anda dan dapat dengan mudah ditemukan kosong. Untuk memahami ini, mari kita lihat sebuah contoh. Asumsikan kita membuat permintaan server dengan panggilan 54 sebagai berikut 6(Kebetulan, perhatikan 55 di sini. Kami mengirimkan data sebagai JSON, yang cukup populer untuk API. Ini adalah default, misalnya, untuk memposting di layanan AngularJS 56. )Di sisi server contoh kami, kami hanya membuang array 52 7Anehnya, hasilnya akan seperti itu 8Mengapa? Jawabannya adalah PHP hanya mem-parsing payload POST secara otomatis jika memiliki tipe konten 59 atau 60. Alasan untuk ini bersifat historis — kedua jenis konten ini pada dasarnya adalah satu-satunya yang digunakan bertahun-tahun yang lalu ketika 52 PHP diimplementasikan. Jadi dengan jenis konten lainnya (bahkan yang cukup populer saat ini, seperti 62), PHP tidak memuat muatan POST secara otomatisKarena _52 adalah superglobal, jika kita menggantinya sekali (sebaiknya di awal skrip kita), nilai yang dimodifikasi (i. e. , termasuk payload POST) kemudian akan dapat direferensikan di seluruh kode kita. Ini penting karena _52 umumnya digunakan oleh kerangka kerja PHP dan hampir semua skrip khusus untuk mengekstrak dan mengubah data permintaanJadi, misalnya, saat memproses payload POST dengan tipe konten 62, kita perlu mengurai konten permintaan secara manual (i. e. , mendekode data JSON) dan menimpa variabel 52, sebagai berikut _9Kemudian saat kita membuang larik _52, kita melihat bahwa larik tersebut menyertakan muatan POST dengan benar; . g 0Kesalahan Umum #8. Berpikir bahwa PHP mendukung tipe data karakterLihatlah contoh kode ini dan coba tebak apa yang akan dicetak 1Jika Anda menjawab 'a' hingga 'z', Anda mungkin terkejut mengetahui bahwa Anda salah Ya, itu akan mencetak 'a' hingga 'z', tetapi kemudian juga akan mencetak 'aa' hingga 'yz'. Mari kita lihat alasannya Di PHP tidak ada tipe data ________11______68; . Dengan mengingat hal itu, menambah _69 71 dalam hasil PHP 72 2Namun untuk lebih membingungkan, _72 secara leksikografis kurang dari 71 3Itu sebabnya kode sampel yang disajikan di atas mencetak huruf 75 hingga 71, tetapi kemudian juga mencetak 72 hingga 78. Itu berhenti ketika mencapai _ 79, yang merupakan nilai pertama yang ditemuinya “lebih besar dari” 71 4Oleh karena itu, inilah salah satu cara untuk mengulang nilai 'a' hingga 'z' dengan benar di PHP 5Atau sebagai alternatif 6Kesalahan Umum #9. Mengabaikan standar pengkodeanMeskipun mengabaikan standar pengkodean tidak secara langsung mengarah pada perlunya men-debug kode PHP, ini mungkin masih menjadi salah satu hal terpenting untuk dibahas di sini Mengabaikan standar pengkodean dapat menyebabkan banyak masalah pada suatu proyek. Paling-paling, itu menghasilkan kode yang tidak konsisten (karena setiap pengembang "melakukan hal mereka sendiri"). Tetapi yang paling buruk, itu menghasilkan kode PHP yang tidak berfungsi atau bisa sulit (terkadang hampir tidak mungkin) untuk dinavigasi, sehingga sangat sulit untuk men-debug, meningkatkan, memelihara. Dan itu berarti berkurangnya produktivitas tim Anda, termasuk banyak usaha yang sia-sia (atau setidaknya tidak perlu). Untungnya bagi pengembang PHP, ada Rekomendasi Standar PHP (PSR), yang terdiri dari lima standar berikut
PSR awalnya dibuat berdasarkan masukan dari pengelola platform yang paling dikenal di pasar. Zend, Drupal, Symfony, Joomla, dan lainnya berkontribusi pada standar ini, dan sekarang mengikutinya. Bahkan PEAR, yang berusaha menjadi standar selama bertahun-tahun sebelumnya, berpartisipasi dalam PST sekarang Dalam arti tertentu, hampir tidak masalah apa standar pengkodean Anda, selama Anda menyetujui standar dan menaatinya, tetapi mengikuti PSR umumnya merupakan ide yang bagus kecuali Anda memiliki alasan kuat pada proyek Anda untuk melakukan sebaliknya. Semakin banyak tim dan proyek yang sesuai dengan PSR. Tt pasti diakui pada saat ini sebagai "standar" oleh sebagian besar pengembang PHP, jadi menggunakannya akan membantu memastikan bahwa pengembang baru terbiasa dan nyaman dengan standar pengkodean Anda ketika mereka bergabung dengan tim Anda Kesalahan Umum #10. Menyalahgunakan $array = [1, 2, 3]; echo implode(',', $array), "\n"; foreach ($array as &$value) {} // by reference echo implode(',', $array), "\n"; foreach ($array as $value) {} // by value (i.e., copy) echo implode(',', $array), "\n"; _81Beberapa pengembang PHP suka menggunakan _81 untuk pemeriksaan boolean untuk hampir semua hal. Namun, ada kasus di mana hal ini dapat menyebabkan kebingunganPertama, mari kita kembali ke array dan 30 instance (yang meniru array). Mengingat kesamaan mereka, mudah untuk mengasumsikan bahwa array dan 30 contoh akan berperilaku identik. Namun, ini terbukti sebagai asumsi yang berbahaya. Misalnya di PHP5. 0 7Dan yang lebih buruk lagi, hasilnya akan berbeda sebelum PHP 5. 0 8Pendekatan ini sayangnya cukup populer. Misalnya, ini adalah cara 85 dari Zend Framework 2 mengembalikan data saat memanggil 86 pada 87 hasil seperti yang disarankan oleh dokumen. Pengembang dapat dengan mudah menjadi korban kesalahan ini dengan data tersebutUntuk menghindari masalah ini, pendekatan yang lebih baik untuk memeriksa struktur array kosong adalah dengan menggunakan 88 _9Dan kebetulan, karena PHP menampilkan 89 ke 7, 88 juga dapat digunakan dalam kondisi 92 untuk memeriksa array kosong. Perlu juga dicatat bahwa, dalam PHP, 88 adalah kompleksitas konstan ( 94 operasi) pada array, yang membuatnya semakin jelas bahwa ini adalah pilihan yang tepatContoh lain ketika _81 bisa berbahaya adalah ketika menggabungkannya dengan fungsi kelas sihir 96. Mari kita definisikan dua kelas dan miliki properti 23 di keduanyaPertama mari kita definisikan kelas _98 yang menyertakan 23 sebagai properti normal 0Kemudian mari kita tentukan kelas 00 yang menggunakan operator ajaib 96 untuk mengakses properti 23 _1Oke, sekarang mari kita lihat apa yang terjadi saat kita mencoba mengakses properti 23 dari masing-masing kelas ini _2Baik sejauh ini Tapi sekarang mari kita lihat apa yang terjadi ketika kita memanggil 81 pada masing-masing _3Aduh. Jadi jika kita mengandalkan _81, kita dapat disesatkan untuk percaya bahwa properti 23 dari 07 kosong, padahal kenyataannya diatur ke 08Sayangnya, jika kelas menggunakan fungsi _96 ajaib untuk mengambil nilai properti, tidak ada cara mudah untuk memeriksa apakah nilai properti itu kosong atau tidak. Di luar ruang lingkup kelas, Anda benar-benar hanya dapat memeriksa apakah nilai 8 akan dikembalikan, dan itu tidak berarti bahwa kunci yang sesuai tidak disetel, karena sebenarnya dapat disetel ke 8Sebaliknya, jika kami mencoba mereferensikan properti yang tidak ada dari instance kelas 98 , kami akan mendapatkan pemberitahuan yang serupa dengan berikut ini _4Jadi poin utama di sini adalah bahwa metode _81 harus digunakan dengan hati-hati karena dapat memberikan hasil yang membingungkan - atau bahkan berpotensi menyesatkan -, jika seseorang tidak berhati-hatiBungkusKemudahan penggunaan PHP dapat menidurkan pengembang ke dalam rasa nyaman yang salah, membuat mereka rentan terhadap debugging PHP yang panjang karena beberapa nuansa dan keistimewaan bahasa. Ini dapat mengakibatkan PHP tidak berfungsi dan masalah seperti yang dijelaskan di sini Bahasa PHP telah berkembang secara signifikan selama 20 tahun sejarahnya. Mengakrabkan diri dengan seluk-beluknya adalah usaha yang bermanfaat, karena akan membantu memastikan bahwa perangkat lunak yang Anda hasilkan lebih dapat diskalakan, tangguh, dan dapat dipelihara. Tag PHPFreelancer? Temukan pekerjaan Anda selanjutnya. Pekerjaan Pengembang PHP Lihat profil lengkap Ilya Sanosian Insinyur Perangkat Lunak Tentang Penulis Ilya adalah konsultan IT, arsitek web, dan manajer dengan pengalaman lebih dari satu dekade dalam membangun dan memimpin tim, melatih rekan kerja, dan membuat proses bekerja dalam jangka panjang dengan membangun alur kerja yang efektif dan dokumentasi yang transparan. Pengetahuan domain Ilya meliputi robotika, berita, keamanan online, perawatan kesehatan, pemasaran online, dan perjalanan Pekerjakan Ilya KomentarPhil Poore Artikel yang sangat bagus, sangat informatif Phil Poore Artikel yang sangat bagus, sangat informatif thebeline Astaga, beberapa di antaranya melekat pada saya (seperti kueri di dalam loop, kami bahkan memiliki satu atau dua set yang [sebelum saya menulis ulang] kueri di dalam loop yang memicu loop lebih lanjut dengan kueri. kekacauan busuk). Namun, saya tidak tahu apakah saya akan menyebut ini sebagai 10 yang paling umum, yaitu karena, meskipun ini membingungkan, pengembang biasanya menemukan masalah ini dan menyelesaikannya sesuai dengan kebutuhan mereka sekali, dan melanjutkan. Bukan karena kesalahan artikelnya, tetapi dengan daftar cucian seperti yang dimiliki PHP, memilih hanya 10 kekurangan adalah hal yang mustahil. Daftar ini gila. http. //eev. ee/blog/2012/04/09/php-a-fractal-of-bad-design/ thebeline Astaga, beberapa di antaranya melekat pada saya (seperti kueri di dalam loop, kami bahkan memiliki satu atau dua set yang [sebelum saya menulis ulang] kueri di dalam loop yang memicu loop lebih lanjut dengan kueri. kekacauan busuk). Namun, saya tidak tahu apakah saya akan menyebut ini sebagai 10 yang paling umum, yaitu karena, meskipun ini membingungkan, pengembang biasanya menemukan masalah ini dan menyelesaikannya sesuai dengan kebutuhan mereka sekali, dan melanjutkan. Bukan karena kesalahan artikelnya, tetapi dengan daftar cucian seperti yang dimiliki PHP, memilih hanya 10 kekurangan adalah hal yang mustahil. Daftar ini gila. http. //eev. ee/blog/2012/04/09/php-a-fractal-of-bad-design/ Alejandro Pablo Tkachuk 10 besar Alejandro Pablo Tkachuk 10 besar Wilhelm Murdoch Ya Tuhan. Ini adalah artikel saya ketika orang bertanya mengapa saya tidak menyukai bahasanya. Jelas, setiap bahasa memiliki kekurangannya, tetapi, setelah 10 tahun PHP, rasanya sangat tidak enak di mulut saya Wilhelm Murdoch Ya Tuhan. Ini adalah artikel saya ketika orang bertanya mengapa saya tidak menyukai bahasanya. Jelas, setiap bahasa memiliki kekurangannya, tetapi, setelah 10 tahun PHP, rasanya sangat tidak enak di mulut saya Sander FWIW, di #10 Anda mengatakan "// PHP 5. 0 atau lebih baru. $array = [];" Notasi array itu TIDAK bekerja di PHP 5. 0-5. 3, sejak diperkenalkan di PHP 5. 4 Sander FWIW, di #10 Anda mengatakan "// PHP 5. 0 atau lebih baru. $array = [];" Notasi array itu TIDAK bekerja di PHP 5. 0-5. 3, sejak diperkenalkan di PHP 5. 4 Bruno Seixas Artikel bagus. Terima kasih =) Setiap hari kami dapat mempelajari sesuatu, meningkatkan gaya pengkodean kami. Ini menunjukkan ke arah yang benar Bruno Seixas Artikel bagus. Terima kasih =) Setiap hari kami dapat mempelajari sesuatu, meningkatkan gaya pengkodean kami. Ini menunjukkan ke arah yang benar Scott Semuanya berjalan dengan baik sampai Anda menyebutkan PSR2. Aduh Scott Semuanya berjalan dengan baik sampai Anda menyebutkan PSR2. Aduh WillHaven Apa bahasa pengantar Anda sekarang? WillHaven Apa bahasa pengantar Anda sekarang? Vojtech Kurka Hanya peringatan. Saat menggunakan array yang tidak kosong, count($array) dapat memperlambat kode Anda secara signifikan. Terlebih lagi, beberapa pengembang cenderung menggunakan if(count($arr)). di dalam loop. Saya tidak akan merekomendasikan praktik ini untuk array Vojtech Kurka Hanya peringatan. Saat menggunakan array yang tidak kosong, count($array) dapat memperlambat kode Anda secara signifikan. Terlebih lagi, beberapa pengembang cenderung menggunakan if(count($arr)). di dalam loop. Saya tidak akan merekomendasikan praktik ini untuk array Hazem Terima kasih untuk artikelnya sangat informatif dan saya menyukainya tetapi "Terlepas dari namanya, isset() tidak hanya mengembalikan false jika item tidak ada, tetapi juga mengembalikan false untuk nilai null. " salah, mengembalikan true jika nilainya salah, dan mengembalikan false hanya jika nilainya nol Hazem Terima kasih untuk artikelnya sangat informatif dan saya menyukainya tetapi "Terlepas dari namanya, isset() tidak hanya mengembalikan false jika item tidak ada, tetapi juga mengembalikan false untuk nilai null. " salah, mengembalikan true jika nilainya salah, dan mengembalikan false hanya jika nilainya nol Maxim Naguchev > Sayangnya, jika kelas menggunakan fungsi __get() ajaib untuk mengambil nilai properti, > tidak ada cara mudah untuk memeriksa apakah nilai properti itu kosong atau tidak. Itu tidak benar. Konstruksi empty($var) pertama coba panggil isset() dan, jika variabel disetel, periksa, apakah variabel kosong atau tidak. Jadi jika kelas menggunakan metode ajaib _get(), ia harus menyadari metode ajaib _isset(). Dan empty() akan berfungsi dengan baik Maxim Naguchev > Sayangnya, jika kelas menggunakan fungsi __get() ajaib untuk mengambil nilai properti, > tidak ada cara mudah untuk memeriksa apakah nilai properti itu kosong atau tidak. Itu tidak benar. Konstruksi empty($var) pertama coba panggil isset() dan, jika variabel disetel, periksa, apakah variabel kosong atau tidak. Jadi jika kelas menggunakan metode ajaib _get(), ia harus menyadari metode ajaib _isset(). Dan empty() akan berfungsi dengan baik Myroniar membantu, terima kasih Myroniar membantu, terima kasih Dusan Lukic Terima kasih untuk artikel yang sangat berguna ini. Saya hanya ingin melakukan koreksi kecil, Anda mengatakan bahwa "PHP selalu melewati objek dengan referensi" yang sebenarnya tidak sepenuhnya benar, karena PHP menggunakan mekanisme khusus untuk objek yang mirip dengan melewati referensi, ada di kalimat kedua di . http. //php. net/manual/en/bahasa. oop5. referensi. php Selain itu, artikel bagus Dusan Lukic Terima kasih untuk artikel yang sangat berguna ini. Saya hanya ingin melakukan koreksi kecil, Anda mengatakan bahwa "PHP selalu melewati objek dengan referensi" yang sebenarnya tidak sepenuhnya benar, karena PHP menggunakan mekanisme khusus untuk objek yang mirip dengan melewati referensi, ada di kalimat kedua di . http. //php. net/manual/en/bahasa. oop5. referensi. php Selain itu, artikel bagus Roy Artikel yang ditulis dengan sangat baik dengan konten asli. Sudah selesai dilakukan dengan baik Roy Artikel yang ditulis dengan sangat baik dengan konten asli. Sudah selesai dilakukan dengan baik Donato C. Laynes Gonzales Tentang #2, $_POST['aktif'] akan menghasilkan E_NOTICE jika kunci tidak ada (kotak centang dan radio tidak dicentang) Jika Anda peduli dengan kinerja dan keamanan PHP, ini penting. array_key_exists adalah opsi yang lebih baik seperti yang dijelaskan. Salam Donato C. Laynes Gonzales Tentang #2, $_POST['aktif'] akan menghasilkan E_NOTICE jika kunci tidak ada (kotak centang dan radio tidak dicentang) Jika Anda peduli dengan kinerja dan keamanan PHP, ini penting. array_key_exists adalah opsi yang lebih baik seperti yang dijelaskan. Salam Aschwin Wesselius Anehnya, tidak ada yang menyebutkan penggunaan /root/test. php. Saya tahu, ini adalah lingkungan lokal dan semuanya, tetapi masih menjalankan skrip pengujian di folder root Anda, terutama pengujian yang memakan banyak memori. Apakah itu dilakukan dengan sengaja? Aschwin Wesselius Anehnya, tidak ada yang menyebutkan penggunaan /root/test. php. Saya tahu, ini adalah lingkungan lokal dan semuanya, tetapi masih menjalankan skrip pengujian di folder root Anda, terutama pengujian yang memakan banyak memori. Apakah itu dilakukan dengan sengaja? ajaniashish Artikel bagus Ilya, sepenuhnya setuju dengan pernyataan Anda "jam debugging yang menarik rambut". Seringkali ketika datang ke pengoptimalan situs web untuk kecepatan, kami menemukan kueri yang tidak perlu di dalam loop. Barang bagus ajaniashish Artikel bagus Ilya, sepenuhnya setuju dengan pernyataan Anda "jam debugging yang menarik rambut". Seringkali ketika datang ke pengoptimalan situs web untuk kecepatan, kami menemukan kueri yang tidak perlu di dalam loop. Barang bagus Scott Karena PSR-2 dimaksudkan sebagai One True Coding Standard. Ya, standar pengkodean adalah suatu keharusan, tetapi tidak harus PSR-2. Bahkan artikel ini mengatakan Anda memerlukan "alasan kuat" untuk tidak menggunakannya yang tidak benar Scott Karena PSR-2 dimaksudkan sebagai One True Coding Standard. Ya, standar pengkodean adalah suatu keharusan, tetapi tidak harus PSR-2. Bahkan artikel ini mengatakan Anda memerlukan "alasan kuat" untuk tidak menggunakannya yang tidak benar Jason Edgecombe Dalam tips #4 dan #5, menggunakan query() dengan rangkaian string adalah contoh buku teks tentang kerentanan injeksi SQL. Lebih baik menggunakan pernyataan yang disiapkan atau setidaknya memperingatkan pembaca bahwa variabel input harus dibersihkan terlebih dahulu. Harap perbarui artikel agar orang tidak membabi buta menggunakan kode contoh dan menganggapnya aman. Artikel ini juga memerlukan tanggal kapan artikel terakhir ditulis atau diperbarui sehingga pembaca dapat mengetahui apakah informasi tersebut sudah basi Jason Edgecombe Dalam tips #4 dan #5, menggunakan query() dengan rangkaian string adalah contoh buku teks tentang kerentanan injeksi SQL. Lebih baik menggunakan pernyataan yang disiapkan atau setidaknya memperingatkan pembaca bahwa variabel input harus dibersihkan terlebih dahulu. Harap perbarui artikel agar orang tidak membabi buta menggunakan kode contoh dan menganggapnya aman. Artikel ini juga memerlukan tanggal kapan artikel terakhir ditulis atau diperbarui sehingga pembaca dapat mengetahui apakah informasi tersebut sudah basi Taman Grant Wesley Itu hal yang sama. null adalah satu-satunya nilai null Taman Grant Wesley Itu hal yang sama. null adalah satu-satunya nilai null Jeff Mattson Dalam kesalahan umum #2. Bukankah seharusnya contoh Anda terbaca jika (. $_POST['aktif']) { echo 'posting tidak aktif'; Jeff Mattson Dalam kesalahan umum #2. Bukankah seharusnya contoh Anda terbaca jika (. $_POST['aktif']) { echo 'posting tidak aktif'; M. S. vinyesh apakah ada alternatif? M. S. vinyesh apakah ada alternatif? Vojtech Kurka menggunakan variabel sebagai penghitung Vojtech Kurka menggunakan variabel sebagai penghitung Erutan409 Saya menemukan yang berikut ini tidak masuk akal. Kawat gigi pembuka untuk kelas HARUS di baris berikutnya, dan kawat gigi penutup HARUS di baris berikutnya setelah badan. Kurung buka untuk metode HARUS di baris berikutnya, dan kurung kurawal HARUS di baris berikutnya setelah badan. Jadi, saya juga punya beberapa masalah dengan PSR-2 Erutan409 Saya menemukan yang berikut ini tidak masuk akal. Kawat gigi pembuka untuk kelas HARUS di baris berikutnya, dan kawat gigi penutup HARUS di baris berikutnya setelah badan. Kurung buka untuk metode HARUS di baris berikutnya, dan kurung kurawal HARUS di baris berikutnya setelah badan. Jadi, saya juga punya beberapa masalah dengan PSR-2 phat_boi BENAR. Namun, tidak masalah standar mana yang digunakan selama standar itu digunakan di seluruh organisasi. Anda tidak masuk ke perusahaan, dan mulai menggunakan PSR-2, ketika sudah ada standar yang ditetapkan. Anda berakhir dengan kekacauan seperti itu phat_boi BENAR. Namun, tidak masalah standar mana yang digunakan selama standar itu digunakan di seluruh organisasi. Anda tidak masuk ke perusahaan, dan mulai menggunakan PSR-2, ketika sudah ada standar yang ditetapkan. Anda berakhir dengan kekacauan seperti itu Julian Chappel +1. semua pembunuh, tidak ada pengisi Julian Chappel +1. semua pembunuh, tidak ada pengisi Juukie14 👍 tips bagus Juukie14 👍 tips bagus Tidak ada Nama > Kesalahan Umum #5 Itu bukanlah kesalahan yang sebenarnya. Pertimbangkan, jika kueri Anda telah menjalankan durasi 1 detik/kueri, jadi apa yang terjadi jika Anda membutuhkan 50-100 kueri seperti itu? . Tetapi Anda harus mengosongkan memori sumber daya setelah mendapatkan hasil kueri jika Anda memiliki sedikit lebih dari beberapa kueri sederhana. Dan tentang PSR-1 > Nama kelas HARUS dideklarasikan di StudlyCaps Ini adalah hal paling gila di PSR Tidak ada Nama > Kesalahan Umum #5 Itu bukanlah kesalahan yang sebenarnya. Pertimbangkan, jika kueri Anda telah menjalankan durasi 1 detik/kueri, jadi apa yang terjadi jika Anda membutuhkan 50-100 kueri seperti itu? . Tetapi Anda harus mengosongkan memori sumber daya setelah mendapatkan hasil kueri jika Anda memiliki sedikit lebih dari beberapa kueri sederhana. Dan tentang PSR-1 > Nama kelas HARUS dideklarasikan di StudlyCaps Ini adalah hal paling gila di PSR Tidak ada Nama > Kesalahan Umum #10. Anda tidak boleh menggunakan ArrayObject alih-alih array asli. Tetapi Anda harus menempatkan tipe dalam definisi saat Anda membutuhkan array sebagai argumen. Anda harus selalu tahu apa yang Anda harapkan agar tidak pernah mendapatkan kesalahan dalam contoh kosong/isset Tidak ada Nama > Kesalahan Umum #10. Anda tidak boleh menggunakan ArrayObject alih-alih array asli. Tetapi Anda harus menempatkan tipe dalam definisi saat Anda membutuhkan array sebagai argumen. Anda harus selalu tahu apa yang Anda harapkan agar tidak pernah mendapatkan kesalahan dalam contoh kosong/isset Mengatasi Idemudia Bagian yang bagus, terima kasih Mengatasi Idemudia Bagian yang bagus, terima kasih Eric Belusic solusi yang baik untuk kesalahan #1 daripada mengingat untuk memanggil unset() adalah dengan menggunakan array_map() Eric Belusic solusi yang baik untuk kesalahan #1 daripada mengingat untuk memanggil unset() adalah dengan menggunakan array_map() Evgeny Chernyavskiy serta array_walk() Evgeny Chernyavskiy serta array_walk() timw4mail Namun postingan itu memiliki ketidakakuratan pada saat itu, dan kurang relevan dari sebelumnya. Saya tidak akan mengatakan bahwa PHP adalah bahasa 'murni' atau 'bersih', tetapi umumnya tidak rawan kesalahan seperti yang terlihat pada 'artikel' itu timw4mail Namun postingan itu memiliki ketidakakuratan pada saat itu, dan kurang relevan dari sebelumnya. Saya tidak akan mengatakan bahwa PHP adalah bahasa 'murni' atau 'bersih', tetapi umumnya tidak rawan kesalahan seperti yang terlihat pada 'artikel' itu Ricardo Sánchez Kenapa tidak saja. $array?. ) Kita tahu bahwa variabel selalu disetel, selalu. Mengapa Anda mencoba menggunakan variabel yang mungkin tidak ada? . Variabel harus selalu ada. ditambah isset dan kosong mengarah ke toleransi kesalahan ketik dalam skrip. $Varku = 0; . Biarkan kompiler mengeluh alih-alih membungkamnya dengan @/isset/kosong. PSR dimaksudkan hanya untuk penggunaan internal. Ini TIDAK PERNAH ditujukan untuk digunakan untuk orang lain. seperti yang mereka katakan di FAQ. "Tidak seorang pun di grup ingin memberi tahu Anda, sebagai seorang programmer, bagaimana membangun aplikasi Anda. " Jadi itu adalah kesalahan umum programmer php, mengikuti rekomendasi yang tidak ditujukan untuk mereka. ) Ricardo Sánchez Kenapa tidak saja. $array?. ) Kita tahu bahwa variabel selalu disetel, selalu. Mengapa Anda mencoba menggunakan variabel yang mungkin tidak ada? . Variabel harus selalu ada. ditambah isset dan kosong mengarah ke toleransi kesalahan ketik dalam skrip. $Varku = 0; . Biarkan kompiler mengeluh alih-alih membungkamnya dengan @/isset/kosong. PSR dimaksudkan hanya untuk penggunaan internal. Ini TIDAK PERNAH ditujukan untuk digunakan untuk orang lain. seperti yang mereka katakan di FAQ. "Tidak seorang pun di grup ingin memberi tahu Anda, sebagai seorang programmer, bagaimana membangun aplikasi Anda. " Jadi itu adalah kesalahan umum programmer php, mengikuti rekomendasi yang tidak ditujukan untuk mereka. ) Marco Cante Untuk 2. get_defined_vars dengan array_key_exist sangat lambat jika Anda mengatur banyak variabel, bukan? Marco Cante Untuk 2. get_defined_vars dengan array_key_exist sangat lambat jika Anda mengatur banyak variabel, bukan? Austerus itu masalah opini dan standar ditentukan oleh praktik mayoritas. Mengapa itu tidak masuk akal? . Definisi kelas dan definisi metode bisa panjang (kadang-kadang log tidak masuk akal) sehingga kurung buka bisa waaaaaay ke kanan. Memilikinya secara otomatis jatuh ke baris berikutnya menghemat keterbacaan dan itu hanyalah satu aturan untuk membantu mengurangi polusi Austerus itu masalah opini dan standar ditentukan oleh praktik mayoritas. Mengapa itu tidak masuk akal? . Definisi kelas dan definisi metode bisa panjang (kadang-kadang log tidak masuk akal) sehingga kurung buka bisa waaaaaay ke kanan. Memilikinya secara otomatis jatuh ke baris berikutnya menghemat keterbacaan dan itu hanyalah satu aturan untuk membantu mengurangi polusi Austerus 1. Ekstensi mysql yang disebutkan sudah tidak digunakan lagi bahkan pada saat artikel dibuat. Itu masalah yang bahkan saat itu tidak memerlukan solusi kode. 2. Serius, penulis menawarkan solusi sebuah praktik yang sengaja dihapus dari inti php (dikembalikan dengan referensi) yang disarankan oleh semua panduan praktik terbaik (kecuali memiliki alasan yang sangat bagus) hanya karena alasan mengizinkan perubahan pada anggota kelas PRIVATE . mengapa mempromosikan pengembalian dengan referensi? Austerus 1. Ekstensi mysql yang disebutkan sudah tidak digunakan lagi bahkan pada saat artikel dibuat. Itu masalah yang bahkan saat itu tidak memerlukan solusi kode. 2. Serius, penulis menawarkan solusi sebuah praktik yang sengaja dihapus dari inti php (dikembalikan dengan referensi) yang disarankan oleh semua panduan praktik terbaik (kecuali memiliki alasan yang sangat bagus) hanya karena alasan mengizinkan perubahan pada anggota kelas PRIVATE . mengapa mempromosikan pengembalian dengan referensi? govindrajput Artikel bagus dan informasi yang sangat bagus didapat di postingan ini jadi saya suka postingannya terima kasih govindrajput Artikel bagus dan informasi yang sangat bagus didapat di postingan ini jadi saya suka postingannya terima kasih PERUSAHAAN KEUANGAN BINTANG LIMA Apakah Anda Membutuhkan Pinjaman Untuk Mengkonsolidasikan Utang Anda Pada 3%? . Kami Menawarkan Konsultasi Keuangan Kepada Klien, Perusahaan Yang Mencari Pembiayaan Hutang / Pinjaman Dan Mencari Modal Kerja Untuk Memulai Bisnis Baru Atau Untuk Memperluas Bisnis Yang Sudah Ada. Perantara/Konsultan/Broker Dipersilakan Membawa Kliennya Dan Terlindungi 100%. Pihak Yang Tertarik Harus Menghubungi Kami Untuk Informasi Lebih Lanjut Melalui Via E-mail. fivestarfinancecompany@gmail. com Untuk telepon atau whatsapp kami +16042659337 PERUSAHAAN KEUANGAN BINTANG LIMA Apakah Anda Membutuhkan Pinjaman Untuk Mengkonsolidasikan Utang Anda Pada 3%? . Kami Menawarkan Konsultasi Keuangan Kepada Klien, Perusahaan Yang Mencari Pembiayaan Hutang / Pinjaman Dan Mencari Modal Kerja Untuk Memulai Bisnis Baru Atau Untuk Memperluas Bisnis Yang Sudah Ada. Perantara/Konsultan/Broker Dipersilakan Membawa Kliennya Dan Terlindungi 100%. Pihak Yang Tertarik Harus Menghubungi Kami Untuk Informasi Lebih Lanjut Melalui Via E-mail. fivestarfinancecompany@gmail. com Untuk telepon atau whatsapp kami +16042659337 Poin Lezat Heyas, I may be 4 or 5 years to late for a response, but no one seems to know the right answer to this one. If I create a php index file with html tags neatly laid out which is worse: A) Having a bunch of php code on top of the index php file and some in the middle for example "" <--- alot of these or B) index php file with all the html tags neatly, and 1 or 2 include(""); ? I'm assuming A) is worse but why am I doing B) and avoiding A)? Thanks in advance! bah, it wont let me type the php carot and question mark and then php it omits it but its supposed to go where it looks janky Poin Lezat Heyas, I may be 4 or 5 years to late for a response, but no one seems to know the right answer to this one. If I create a php index file with html tags neatly laid out which is worse: A) Having a bunch of php code on top of the index php file and some in the middle for example "" <--- alot of these or B) index php file with all the html tags neatly, and 1 or 2 include(""); ? I'm assuming A) is worse but why am I doing B) and avoiding A)? Thanks in advance! bah, it wont let me type the php carot and question mark and then php it omits it but its supposed to go where it looks janky discreetsoft good awesome information, thanks yaser Discreet Soft AbelardoLG Artikel bagus. Terima kasih telah membawanya kepada kami. . ) Sdr JorgeC PHP, termasuk PHP +7 dengan opcache cukup efisien. Namun, PHP secara umum sangat buruk dalam menangani memori, biasanya digunakan dari x2. 5 (rata-rata) untuk setiap memori yang digunakan. Jadi, jika kita memiliki array dengan 100 elemen (100kb), PHP menggunakan 250kb, ditambah indeksnya. get_defined_vars() bisa menjadi babi memori karena kami membuat array baru dengan semua variabel, bahkan jika hidup ini singkat Bill Jay Artikel bagus. Namun 10 kesalahan ini tidak umum. Ini adalah 10 kelemahan pengkodean yang sulit dideteksi oleh pengembang PHP. Secara pribadi, isset() biasanya agak membingungkan. Aturannya adalah hindari menyetel variabel ke null di PHP karena ini sama dengan membatalkan setelannya. batalkan($a); . $item = larik(); Apa cara yang efisien untuk menggabungkan dua variabel dalam PHP?Istilah concatenate dalam PHP mengacu pada penggabungan beberapa string menjadi satu string; . Dalam PHP, penggabungan dilakukan dengan menggunakan operator penggabungan (". ") yang berupa titik .
Apakah rangkaian string lambat?Setiap kali strcat memanggil, perulangan akan berjalan dari awal sampai akhir; . Sampai string ekstensif, penambahan string berlangsung sangat berat dan lambat .
Mengapa kami menggunakan concatenate di PHP?Operator penggabungan PHP (. ) digunakan untuk menggabungkan dua nilai string menjadi satu string .
Apa hasil penggabungan string dengan tipe data lain di PHP?Sebuah string dan nilai bilangan bulat ditambahkan, dan hasilnya adalah nilai bilangan bulat . Operator penggabungan ('. |