Pertanyaan Pertanyaan setiap Pengembang PHP yang baik harus dapat menjawab [tertutup]


Saya sedang mengalami Pertanyaan setiap baik. Pengembang Net harus dapat menjawab dan sangat terkesan dengan konten dan pendekatan pertanyaan ini dan dengan semangat yang sama, saya menanyakan pertanyaan ini untuk Pengembang PHP.

Pertanyaan apa apakah menurut Anda harus baik Programmer PHP dapat merespon?

EDIT : Saya menandai pertanyaan ini sebagai komunitas wiki karena tidak spesifik pengguna dan bertujuan untuk melayani komunitas pemrograman secara luas.

Menantikan tanggapan yang luar biasa.

CATATAN : Jawab pertanyaan juga seperti yang disarankan di komentar sehingga orang bisa belajar sesuatu yang baru juga mengenai bahasa.


75


asal


Jawaban:


Harus diakui, saya mencuri pertanyaan ini dari tempat lain (tidak ingat di mana saya membacanya lagi) tetapi berpikir itu lucu:

Q: apa yang T_PAAMAYIM_NEKUDOTAYIM?
SEBUAH: Its operator resolusi lingkup (double colon)

PHPer yang berpengalaman segera tahu apa artinya. Pengembang yang kurang berpengalaman (dan bukan Ibrani) mungkin ingin membaca ini.

Tetapi pertanyaan yang lebih serius sekarang:


Q: Apa penyebab dari peringatan ini: 'Peringatan: Tidak dapat mengubah informasi header - header sudah dikirim', dan apakah praktik yang baik untuk mencegahnya?
SEBUAH:  Sebab: data tubuh dikirim, menyebabkan header untuk dikirim juga.
Pencegahan: Pastikan untuk mengeksekusi kode khusus header terlebih dahulu sebelum Anda mengeluarkan data tubuh apa pun. Pastikan Anda tidak sengaja mengirim spasi atau karakter lainnya.


Q: Apa yang salah dengan pertanyaan ini: "SELECT * FROM table WHERE id = $_POST[ 'id' ]"?
SEBUAH:  1 Ini sangat vulnarable untuk injeksi SQL. Jangan pernah menggunakan input pengguna secara langsung dalam queri. Bersihkan terlebih dahulu. Preferebly menggunakan pernyataan siap pakai (PDO) 2 Jangan pilih semua kolom (*), tetapi tentukan setiap kolom. Ini terutama adalah ment untuk mencegah query memonopoli memori ketika misalnya kolom BLOB ditambahkan di beberapa titik di masa depan.


Q: Apa yang salah dengan pernyataan if ini: if( !strpos( $haystack, $needle ) ...?
SEBUAH:  strpos mengembalikan posisi indeks di mana ia pertama kali menemukan jarum $, yang bisa jadi 0. Sejak 0 juga memutuskan untuk false solusinya adalah dengan menggunakan perbandingan ketat: if( false !== strpos( $haystack, $needle )...


Q: Apa cara yang disukai untuk menulis pernyataan if ini, dan mengapa?
if( 5 == $someVar ) atau if( $someVar == 5 )
SEBUAH: Yang pertama, karena mencegah penugasan tidak disengaja dari 5 ke $ someVar ketika Anda lupa untuk menggunakan 2 equalsigns ($someVar = 5), dan akan menyebabkan kesalahan, yang terakhir tidak akan.


Q: Diberikan kode ini:

function doSomething( &$arg )
{
    $return = $arg;
    $arg += 1;
    return $return;
}

$a = 3;
$b = doSomething( $a );

... berapa nilai dari $a dan $b setelah panggilan fungsi dan mengapa?
SEBUAH:  $a aku s 4 dan $b aku s 3. Yang pertama karena $ arg dilewatkan oleh referensi, yang terakhir karena nilai kembalian dari fungsi adalah salinan (bukan referensi ke) nilai awal argumen.


OOP spesifik

Q: Apa perbedaan antara public, protected dan private dalam definisi kelas?
SEBUAH:  public membuat anggota kelas tersedia untuk "semua orang", protectedmembuat anggota kelas hanya tersedia untuk kelas itu sendiri dan turunan, private membuat anggota kelas hanya tersedia untuk kelas itu sendiri.


Q: Apa yang salah dengan kode ini:

class SomeClass
{
    protected $_someMember;

    public function __construct()
    {
        $this->_someMember = 1;
    }

    public static function getSomethingStatic()
    {
        return $this->_someMember * 5; // here's the catch
    }
}

SEBUAH: Metode statis tidak memiliki akses ke $ ini, karena metode statis dapat dijalankan tanpa instantiate kelas.


Q: Apa perbedaan antara antarmuka dan kelas abstrak?
SEBUAH: Antarmuka mendefinisikan kontrak antara kelas pelaksana adalah dan objek yang memanggil antarmuka. Kelas abstrak pra-mendefinisikan perilaku tertentu untuk kelas yang akan memperpanjangnya. Sampai tingkat tertentu, ini juga dapat dianggap sebagai kontrak, karena ia menjamin metode-metode tertentu ada.


Q: Apa yang salah dengan kelas yang secara dominan mendefinisikan pengambil dan penyetel, yang memetakan langsung ke anggota internal itu, tanpa benar-benar memiliki metode yang mengeksekusi perilaku?
SEBUAH: Ini mungkin bau kode karena objek bertindak sebagai array yang dimuliakan, tanpa banyak penggunaan lainnya.


Q: Mengapa implementasi PHP dari penggunaan antarmuka menjadi kurang optimal?
SEBUAH: PHP tidak mengizinkan Anda untuk menentukan tipe pengembalian yang diharapkan dari metode, yang pada dasarnya membuat antarmuka cukup tidak berguna. :-P


50



Pertanyaan keamanan yang pasti!

(jawaban sederhana dalam posting ini, tentu saja mengamankan aplikasi web php jauh lebih kompleks)

  • bagaimana cara menangani injeksi SQL?

mysql_real_escape_string () untuk memulai dengan MySQL. Kemudian cobalah belajar PDO untuk memanfaatkan pernyataan siap dan portabilitas di seluruh vendor database.

  • bagaimana cara menangani CSRF (Pemalsuan Permintaan Lintas Situs)?

Tambahkan token pada setiap permintaan penting untuk mengamankan operasi penting (pengguna harus melihat formulir sebelum mengirim permintaan penting).

  • bagaimana cara menangani XSS (Cross-Site Scripting) tercermin dan disimpan?

htmlentities () baik untuk memulai.

  • varian dari XXX suntikan: injeksi LDAP, injeksi XPath, dll ...?

Anda perlu tahu apa yang dimaksud dengan "kosakata" yang digunakan oleh XXX dan kemudian memotong apa yang Anda perlukan untuk membersihkan dan / atau "memeriksa dan menolak".

  • apa daftar fungsi yang masuk akal?

Fungsi yang menafsirkan kode PHP (mungkin termasuk dalam file remote) atau yang menjalankan perintah pada sistem Anda. Daftar pendek dan tidak lengkap bisa jadi: exec (), passthru (), system (), popen (), eval (), preg_replace () ...

  • bagaimana cara menangani bahaya inklusi file?
  • apa itu transversal jalan?
  • apa risiko yang terkait dengan unggahan file?

Perlu hati-hati memeriksa parameter yang digunakan saat membuka file atau sumber daya jarak jauh.

  • bagaimana menegakkan konfigurasi konfigurasi PHP Anda (yaitu apakah Anda tahu apa gunanya php.ini)?

Ini akan lama jadi saya melewatkan jawabannya, silakan baca manual PHP.

  • tentang memfilter data pengguna: apa perbedaan antara membersihkan dan periksa-dan-menolak ?

Yang pertama mengubah entri dalam sesuatu yang kurang bermusuhan. Yang kedua periksa apakah entri itu benar dan, jika tidak menolaknya.


24



"Kenapa kamu tidak menggunakan yang lain?"

Maaf, seseorang harus mengatakannya :)


14



Apakah php cross-browser?

(saya tahu, ini akan membuat banyak orang tertawa, tetapi pertanyaan yang lebih banyak ditanyakan di forum php!)


12



Saya pikir pertanyaan yang bagus adalah: bagaimana cara kerja HTTP? Bekerja dengan GET dan POST data antara komunikasi HTTP lainnya melekat dalam pengembangan PHP. Memahami bagaimana HTTP bekerja dalam konteks yang lebih luas dan bagaimana penerapan PHP ini berjalan jauh.


11



Apa perbedaan antara == dan === dan mengapa Anda ingin menggunakan == sama sekali?


9



Jelaskan mengapa kode berikut ditampilkan 2.5 dari pada 3:

$a = 012;
echo $a / 4;

Menjawab: Saat nomor didahului oleh 0 di PHP, nomor tersebut diperlakukan sebagai oktal angka (basis-8). Oleh karena itu nomor oktal 012 sama dengan angka desimal 10.


9



Belum ada yang menyentuh tetapi itu adalah sesuatu yang setiap pengembang PHP harus dapat berbicara panjang lebar tentang: Mengapa register_globals buruk?


8



Ketika sebuah situs dikembangkan menggunakan php dan itu omong kosong, apakah itu:

a) kesalahan PHP

b) Kesalahan pemrogram


7



Apa praktik terbaik untuk keluar dari masukan pengguna? (Pertanyaan ini tampaknya sering muncul)


6



  • Saat memanggil elemen "name" dari $ array, mana yang benar ?:

    • $array[name]
    • $array['name']

    Keduanya akan sering berfungsi, tetapi hanya formulir yang dikutip yang benar. define('name', 0); dan saksikan serangga terbang. Saya sudah terlalu sering melihat ini.

  • Bagaimana Anda bisa memaksa elemen formulir dikirimkan sebagai larik?

    Tambahkan tanda kurung kosong ke atribut nama: beberapa <input type="checkbox" name="checkboxes[]" /> elemen akan diubah menjadi larik di server (mis. $_POST['checkboxes'][0..n]). Saya tidak berpikir itu 100% spesifik-PHP, tetapi itu pasti mengalahkan perulangan $_POST untuk setiap kemungkinan 'checkboxes'.$i elemen.

  • mysql_, mysqli_, atau PDO?

    Hanya satu jawaban yang benar-benar salah di sini: perpustakaan mysql_ tidak melakukan pernyataan siap dan tidak bisa lagi memaafkan kapasitasnya untuk kejahatan. Penamaan fungsi, yang diharapkan dipanggil beberapa kali per kueri yang dieksekusi, "mysql_real_escape_string()", hanya garam di lukanya.


6