PHPのクラスメソッドのデフォルトの可視性


118

マニュアルを見ましたが、答えが見つからないようです。

可視性宣言のないメソッドのPHPのデフォルトの可視性は何ですか?PHPには、Javaのようなパッケージの可視性がありますか?

たとえば、次のコードでは、go()パブリックですか、プライベートですか?

class test {
  function go() {
  }
}

私が尋ねた理由は、多くのコンストラクターのコードがと書かれfunction __construct()たり、一部がと書かれたりしたことを見たからpublic function __construct()です。それらは同等ですか?

回答:



22

デフォルトはパブリックです。常に含めることをお勧めしますが、PHP4はアクセス修飾子なしのクラスをサポートしているため、レガシーコードでこれらのクラスが使用されないことがよくあります。

いいえ、主に最近までPHPにはパッケージがなかったため、PHPにはパッケージの可視性がありません。


16
@Ian:(PythonZenが言うように)「明示的なものは暗黙的なものよりも優れている」からです。これにより、他のプログラマーは、コンストラクターがプライベートなのかパブリックなのか、あるいは何なのかと思って頭脳サイクルを浪費します。人々が常にアクセス修飾子を使用した場合、元の投稿者はこの質問をしなかったかもしれません。
ユーザー、

また、Javaなどの言語では、デフォルトがpackage-privateであったことに注意してください。設計上、package-privateであるのか、開発者がそれを指定し忘れたのか(特に、それほど上級ではない開発者を扱う場合)。:それのPMDは、このようなルールが含まなぜpmd.github.io/pmd-5.5.2/pmd-java/rules/java/...
Johncoを

9

デフォルトはパブリックです。古いコードはそれが公開されることを期待しているため、その理由はおそらく下位互換性です(公開されていないと機能しなくなります)。


推論のための称賛。
Guney Ozsan、2018年


1

見えないときキーワード(publicprivateまたはprotected)を使用しない、方法になります公共。ただし、この方法でプロパティを定義することはできません。物件について、あなたは宣言で、視認性のキーワードを追加する必要があります。

クラスで宣言されていないプロパティの場合、メソッド内でプロパティに値を割り当てると、公開されます。

<?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() そして public function __construct()同じメソッド名として機能します。

メソッド名のプレフィックスを定義できなかった場合は、デフォルトでpublicにする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.