2016-07-19 4 views
3

PHP manualのプロパティとメソッドのデフォルトの可視性が見つかりました。しかし、私はクラスそのものに関する情報を見つけることができませんでした。PHPでは、デフォルトでクラスの可視性は何ですか?

私の推測では、それは公共のだということです。しかし、誰かがこのマニュアルに書かれている部分にリンクすることができれば、私はそれを感謝します。

+6

PHPはパブリッククラス以外のものをサポートしていません – iainn

+1

あなたの推測はデフォルトのメソッド修飾子にぴったりです。パブリックメソッド(php4互換)です。しかし、アクセス修飾子を省略すると、通知が生成されます。クラスそのものについて - すべてのクラスは常に公開されています。 –

+0

私の経験は主にPHPに焦点を当てているので、クラスの可視性はどのようにそれをサポートする言語で正確に動作するのですか?それは相続に関連していますか? –

答えて

4

単に公共

を入れてください。 PHPはpublicクラス以外のものをサポートしていません。

のJava/.NETの/ etcとは異なり、パッケージ、アセンブリ、内部またはネストされたクラスのいずれかの概念がありません。名前空間は、IncrediblyLongClassNamesを避けるために本質的に単なる文法的な砂糖であり、実際の可視性を変更することはできません。

全体のアイデアは関係なく、あなたが使用しているものの範囲の、誰もがまだちょうどあなたのクラスを取り、公共の場でそれを宣言する可能性があるため、非コンパイル言語であまり意味があります。

A PHP 7但し書き:匿名クラス

PHP 7は、単純なクラスのオンザフライ定義が可能、anonymous classes *の概念を導入しました。非常に基本的な例として:これらの変数に割り当てることができるので

<?php 
$foo = new class { 
    public function hello($what) 
    { 
     echo 'Hello ', $what, PHP_EOL; 
    } 
}; 

(new $foo)->hello('world'); 

# Hello world 

、彼らはその変数のスコープに限定することができ、かつ、他のように周り渡されます。

匿名クラスを許可するほとんどの言語とは異なり、PHPではではありません。は、定義されているスコープから何かを継承します。リンクされたドキュメントには、匿名クラスを親から継承して定義することによって、これを回避する方法の例がいくつかあります。

*厳密に言えば、フードの下に名前があります。したがって、誰かがインスタンス上でget_class()を実行できる場合、ガベージコレクションされていないため、独自のコピーをインスタンス化できます。

2

PHPは、「デフォルト」は常に公開されますが、ここでは最も正確な答えはPHPのクラスはとにかく、このような考え方を持っていないということです。

関連する問題