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?

Yada
sumber

Jawaban:

179

Default-nya adalah publik.

Metode kelas dapat didefinisikan sebagai publik, privat, atau dilindungi. Metode yang dideklarasikan tanpa kata kunci visibilitas eksplisit didefinisikan sebagai publik.

http://www.php.net/manual/en/language.oop5.visibility.php

Harga Jansen
sumber
11
Hal yang sama berlaku untuk properti
Maret. 2377
7
Hal yang sama berlaku untuk konstanta.
Kolyunya
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.

Johnco
sumber
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).

Tomas Markauskas
sumber
Kudos untuk alasannya.
Guney Ozsan
7

Visibilitas default adalah PUBLIK

Sumber

Sasa
sumber
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
    }
}
James.Valon
sumber
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.

Gazi Anis
sumber