Standar Coding Magento ECG tampaknya (setidaknya jenis) resmi sebagai standar untuk ekstensi Magento 1:
https://github.com/magento-ecg/coding-standard
Tapi saya tidak mengerti alasan di balik semua aturan, dan aturan sniffer kode dengan pesan mereka saja tidak banyak membantu. Apakah ada dokumentasi terperinci tentang standar? Saya tahu praktik terbaik umum dan panduan pengembang tetapi tidak dapat menemukan sesuatu yang spesifik tentang standar pengkodean ini.
Yang paling mengganggu saya adalah ketatnya tidak menggunakan fungsi PHP.
Sebagai contoh: Mengapa setiap sistem file tunggal terkait fungsi PHP dilarang ?
Saya kira, Anda seharusnya menggunakan Varien_Io_File
, Varien_File_Object
dll. Tetapi bahkan pengembang inti tidak mengetahui semua kelas Varien dan Anda sering menemukan hal-hal seperti di Mage_ImportExport_Model_Import_Adapter_Csv
:
$this->_fileHandler = fopen($this->_source, 'r');
Jadi, intinya bukan contoh terbaik, seperti sering.
Fungsi terlarang IMHO dipertanyakan lainnya:
mb_parse_str
parse_str
parse_url
base64_decode
- ya, itu digunakan di backdoors tetapi larangan
eval
harus cukup dan ada kasus penggunaan yang sah, seperti pengkodean data biner. Dan selainjson_decode
(yang tidak dilarang) tidak ada pembantu inti yang tersedia untuk ini.
- ya, itu digunakan di backdoors tetapi larangan
Pada dasarnya, pertanyaan saya adalah: Di mana standar ini didokumentasikan? Dan / atau adakah daftar "hal-hal yang harus digunakan alih-alih fungsi-fungsi PHP asli ini"?
sumber
Zend_Db
pembuat kueri mampu membuat kueri SQL?select
pernyataan denganZend_Db
menggunakan SQL mentah sebagai input? Saya berasumsi itulah yang dilakukan github.com/kalenjordan/custom-reports di backend.Jawaban:
Mendapat jawaban tidak resmi dari tim ECG mengenai hal itu:
Pertama-tama, fungsi yang ditandai tidak selalu dilarang - fungsi tersebut harus memicu tinjauan manual tentang penggunaan untuk memastikan penggunaan yang sah. Ini alat bantu peninjau, bukan alat penilaian kode yang baik / buruk.
Kedua, asumsinya adalah lebih baik menggunakan pembungkus Magento (fungsi / kelas) jika ada karena mungkin menawarkan fungsionalitas atau perlindungan tambahan.
Ketiga, untuk panggilan tertentu, base64_decode sering digunakan untuk kode yang disuntikkan berbahaya, dan sisanya seperti parse_str mungkin rentan, terutama menangani input yang tidak diketahui atau yang disediakan pengguna - lihat misalnya http://php-security.org/2010/05/ 31 / mops-2010-049-php-parse_str-interrupt-memory-korupsi-kerentanan /
Sekali lagi, ini ditandai untuk ditinjau dan tidak menolak kode sebagai buruk.
Semoga ini bisa membantu.
sumber
Standar Pengkodean memiliki dua tujuan.
membuat mencari bagian yang mungkin bermasalah jauh lebih mudah. Pengembang berpengalaman sudah tahu bagian mana dari modul baru yang perlu dia ulas, dan ini menandai standar dan mencantumkannya untuknya. Bukan supaya dia bisa menghapus bagian ini, tetapi untuk meninjau jika mereka diperlukan, bermasalah atau keduanya.
mendukung pengembang yang tidak berpengalaman tentang hal-hal yang harus dihindari. Meskipun semua fungsi yang ditandai dapat menjadi solusi yang baik untuk masalah tertentu, mereka sangat mudah digunakan dengan cara yang bermasalah. Ini mengarahkan pengembang untuk lebih memikirkan masalah, dan seringkali ke solusi yang lebih baik yang tidak bertentangan dengan standar.
Dan kadang-kadang, bahkan pengembang yang paling berpengalaman secara membabi buta mengikuti standar dan menciptakan solusi yang paling kejam, hanya untuk tidak menyinggung standar komunitas yang dipaksakan.
sedikit informasi tambahan
Fungsi file sering memungkinkan penggunaan pembungkus protocoll, berarti jalur file dimulai dengan http: // mengarah ke http reaquest, yang sering digunakan untuk "menelepon ke rumah", dan dari waktu ke waktu membunuh toko, karena server tidak dapat dijangkau (Batas waktu default 30 detik) dan dibangun menjadi tempat yang sangat sentral.
sql everyithing realted, tidak ada yang percaya berapa banyak lubang injeksi sql masih ada di luar sana. Contoh yang bagus adalah, seperti Pencarian di situs web Mysql memilikinya.
ada penolong inti untuk json_decode di suatu tempat, tetapi memiliki implementasi yang sangat lama, cukup gunakan json_decode. Tidak tahu mengapa harus dilarang.
gettext adalah bagian php yang menarik, saya ingat itu menggunakan beberapa implementasi OS asli yang dapat memiliki masalah, jika Anda menggunakannya secara paralel dengan berbagai bahasa (seperti biasanya terjadi ketika Anda memiliki lebih dari satu bahasa di toko Anda. Tidak pernah benar-benar menyelidiki ini sebanyak , tetapi seharusnya tidak perlu untuk itu dalam Konteks Magento.
Pergi lebih jauh melalui daftar, yang tampaknya hanya daftar dengan fungsi sebanyak mungkin. Sejarahnya sebenarnya lucu, sepertinya mereka menghapus beberapa fungsi dari daftar, setelah mereka perhatikan, mereka memanfaatkannya. : D
sumber