Visibilitas default metode kelas di PHP


118

Saya melihat manualnya , tetapi sepertinya saya tidak dapat menemukan jawabannya.

Apa visibilitas default dalam PHP untuk metode tanpa deklarasi visibilitas? Apakah PHP memiliki visibilitas paket seperti di Java?

Misalnya, dalam kode berikut, apakah go()publik atau pribadi?

class test {
  function go() {
  }
}

Alasan saya bertanya adalah bahwa saya telah melihat banyak kode konstruktor ditulis sebagai function __construct()dan beberapa sebagai public function __construct(). Apakah mereka setara?

Jawaban:



22

Default-nya adalah publik. Merupakan praktik yang baik untuk selalu memasukkannya, namun PHP4 mendukung kelas tanpa pengubah akses, jadi tidak umum untuk tidak melihat penggunaannya dalam kode lama.

Dan tidak, PHP tidak memiliki visibilitas paket, terutama karena sampai saat ini PHP tidak memiliki paket.


16
@ Ian: Saya akan mengatakan karena "eksplisit lebih baik daripada implisit" (seperti yang dikatakan Zen of python ). Ini menyebabkan pemrogram lain membuang siklus otak sambil bertanya-tanya apakah konstruktornya pribadi atau publik atau apa. Jika orang selalu menggunakan pengubah akses, pengepos asli bahkan mungkin tidak menanyakan pertanyaan ini.
Pengguna

Yang juga perlu diperhatikan, pada bahasa seperti Java, apakah defaultnya adalah paket-privat, orang selalu bertanya-tanya apakah itu paket-privat berdasarkan desain, atau pengembang hanya lupa untuk menentukannya (khususnya ketika berhadapan dengan pengembang yang tidak terlalu senior). Itulah mengapa PMD menyertakan aturan seperti ini: pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
Johnco

9

Standarnya adalah publik. Alasannya mungkin adalah kompatibilitas mundur karena kode lama mengharapkannya menjadi publik (itu akan berhenti berfungsi jika tidak publik).


Kudos untuk alasannya.
Guney Ozsan


1

Jika tidak ada kata kunci visibilitas ( public, privateatau protected) yang digunakan, metode akan menjadi publik . Namun, Anda tidak dapat mendefinisikan properti dengan cara ini. Untuk properti , Anda perlu menambahkan kata kunci visibilitas pada deklarasi.

Untuk properti yang tidak dideklarasikan di kelas dan Anda menetapkan nilai padanya di dalam metode akan memiliki visibilitas publik.

<?php
class Example {
    public $name; 
    public function __construct() {
        $this -> age = 9; // age is now public
        $this -> privateFunction();
    }
    private function privateFunction() {
        $this -> country = "USA"; // this is also public
    }
}

0

function __construct()dan public function __construct()berfungsi sebagai nama metode yang sama.

Jika Anda tidak dapat menentukan awalan untuk nama metode, itu harus publik secara default.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.