Sambil melihat-lihat berbagai pustaka PHP, saya perhatikan bahwa banyak orang memilih untuk mengawali beberapa metode kelas dengan satu garis bawah, seperti
public function _foo()
...dari pada...
public function foo()
Saya menyadari bahwa pada akhirnya ini tergantung pada preferensi pribadi, tetapi saya bertanya-tanya apakah ada yang tahu dari mana kebiasaan ini berasal.
Pikir saya adalah bahwa itu mungkin dibawa dari PHP 4, sebelum metode kelas dapat ditandai sebagai dilindungi atau pribadi, sebagai cara menyiratkan "jangan panggil metode ini dari luar kelas". Namun, terlintas dalam benak saya bahwa mungkin itu berasal dari suatu tempat (suatu bahasa) yang tidak saya kenal atau mungkin ada alasan yang baik di baliknya bahwa saya akan mendapat manfaat dari mengetahuinya.
Setiap pemikiran, wawasan, dan / atau opini akan dihargai.
sumber
Jawaban:
Ini dari masa lalu yang buruk dari Object Oriented PHP (PHP 4). Implementasi OO itu sangat buruk, dan tidak termasuk hal-hal seperti metode pribadi. Untuk mengimbangi, pengembang PHP memilih metode yang dimaksudkan untuk menjadi pribadi dengan garis bawah. Di beberapa kelas yang lebih tua, Anda akan melihat
/**private*/ __foo() {
memberikan bobot tambahan.Saya belum pernah mendengar tentang pengembang yang memasang semua metode mereka dengan garis bawah, jadi saya tidak bisa mulai menjelaskan apa penyebabnya.
sumber
Saya percaya sumber paling otoritatif untuk konvensi semacam ini untuk PHP saat ini adalah PSR-2: Panduan Gaya Pengkodean karena Zend Framework adalah bagian dari PSR :
sumber
Sekarang, pada 2013, ini adalah gaya buruk "resmi" oleh pedoman pengkodean PSR-2:
Sumber: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
sumber
PSR-2
-> "TIDAK HARUS" berarti "BUKAN MEREKOMENDASIKAN" tidak dilarang Itu berarti dalam beberapa kasus dapat diterima. PSR Doc -> ietf.org/rfc/rfc2119.txtSaya sangat menentang awalan metode privat / terproteksi dengan garis bawah karena Anda dapat menggunakan kata kunci privat / terlindungi untuk itu dan IDE akan menandainya untuk Anda.
Dan saya masih, tetapi, saya menemukan satu alasan mengapa itu bisa menjadi praktik yang baik. Bayangkan Anda memiliki metode publik
addFoo()
dan di dalam metode itu Anda memiliki beberapa bagian tugas yang sama dengan metode lainaddFooWhenBar()
,addFooWhenBaz()
... Sekarang, nama terbaik untuk metode umum itu adalahaddFoo()
, tetapi sudah diambil, jadi Anda harus membuat beberapa nama jelek sepertiaddFooInternal()
atauaddFooCommon()
atau ... tetapi_addFoo()
metode pribadi sepertinya yang terbaik.sumber
Garis bawah utama biasanya digunakan untuk properti dan metode pribadi . Bukan teknik yang biasa saya pakai, tetapi tetap populer di kalangan beberapa programmer.
sumber
Saya menggunakan garis bawah terkemuka di kelas PHP 5 yang saya tulis untuk metode pribadi. Ini adalah isyarat visual kecil bagi pengembang bahwa anggota kelas tertentu bersifat pribadi. Jenis petunjuk ini tidak berguna ketika menggunakan IDE yang membedakan anggota publik dan pribadi untuk Anda. Saya mengambilnya dari hari C # saya. Kebiasaan lama ...
sumber
Saya percaya asumsi awal Anda benar, saya telah menemukan itu menjadi praktik umum untuk beberapa bahasa untuk awalan garis bawah untuk metode / anggota dll yang dimaksudkan untuk dirahasiakan dengan "objek". Hanya cara visual untuk mengatakan meskipun Anda bisa, Anda tidak harus memanggil ini!
sumber
Saya mencari jawaban yang sama, saya melakukan riset, dan saya baru saja menemukan bahwa kerangka kerja php menyarankan gaya yang berbeda:
Penyala kode
Manual resmi memiliki bagian gaya pengkodean yang mendorong praktik ini :
Kerangka kerja lain melakukan hal yang sama, seperti
Cakephp:
melakukan hal yang sama :
Dan juga
PIR
melakukan hal yang sama :
Sementara
Drupal
gaya kode secara khusus memperingatkan ini :
Simfoni
di sisi lain, nyatakan :
sumber
Saya tahu itu dari python, di mana awalan variabel Anda dengan garis bawah menyebabkan kompiler menerjemahkan beberapa urutan acak huruf dan angka di depan nama variabel yang sebenarnya. Ini berarti bahwa setiap upaya untuk mengakses variabel dari luar kelas akan menghasilkan kesalahan "variabel tidak terdefinisi".
Saya tidak tahu apakah ini masih merupakan konvensi untuk digunakan dalam python
sumber
Dalam Drupal (a php CMS) garis bawah dapat digunakan untuk mencegah agar kait tidak dipanggil ( https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 ).
Jika saya memiliki modul yang disebut "my_module" dan ingin memberi nama fungsi my_module_insert itu akan "kait" pada fungsi hook_insert. Untuk mencegahnya, saya dapat mengubah nama fungsi saya menjadi _my_module_insert.
ps Cara kait bekerja di Drupal dimungkinkan untuk menerapkan hook secara tidak sengaja, yang sangat buruk.
sumber
Drupal, dan gunakan garis bawah:
Secara umum garis bawah adalah untuk menandai fakta bahwa suatu fungsi mungkin hanya akan dipanggil oleh fungsi induk terkait ...
Tentu saja, hanya sebuah contoh sederhana ...
sumber
Menggunakan garis bawah hanya untuk tujuan mengingat bahwa kita tidak akan 'memodifikasi variabel' / 'memanggil fungsi' di luar kelas.
Seperti kita mendeklarasikan variabel const di semua huruf besar sehingga sambil melihat nama variabel dapat menebak bahwa itu adalah variabel const. Serupa dengan variabel yang tidak ingin kami modifikasi di luar kelas, kami mendeklarasikannya dengan garis bawah untuk konvensi kami sendiri.
sumber
Mereka disebut "metode ajaib" .
sumber
_foo()
dengan garis bawah utama tunggal bukanlah metode ajaib. Metode sihir dilambangkan oleh dua garis bawah terkemuka berturut-turut. Pertanyaan di sini hanya berbicara tentang satu.