web-dev-qa-db-ja.com

publicとpublic staticの違いは?

staticはどういう意味ですか?

Publicは、クラスの外部からアクセスでき、クラスの内部からのみprivateにアクセスできることを意味します

40
Alex

静的とは、クラスをインスタンス化せずにアクセスできることを意味します。これは定数に適しています。

静的メソッドは、オブジェクトの状態に影響を与える必要はありません。パラメータに加えてローカル変数を持つことができます。

39
BillThor

public:パブリックに宣言されたアイテムはどこからでもアクセスできます。

protected:Protectedは、継承クラスと親クラス(およびアイテムを定義するクラス)へのアクセスを制限します。

private:Privateは、アイテムを定義するクラスにのみ可視性を制限します。

static:静的変数はローカル関数スコープにのみ存在しますが、プログラムの実行がこのスコープを離れても値は失われません。

final:finalキーワードは、定義の末尾にfinalを付けることで、子クラスがメソッドをオーバーライドするのを防ぎます。クラス自体がfinalとして定義されている場合、それを拡張することはできません。

transient:一時変数は、シリアル化できない変数です。

volatile:複数のスレッドによって同時に変更される可能性のある変数はvolatileと宣言する必要があります。 volatileと宣言された変数は、値がいつでも変更される可能性があるため、コンパイラによって最適化されません。

33
Cristian David

from http://php.net/manual/en/language.oop5.static.php

クラスのプロパティまたはメソッドを静的として宣言すると、クラスのインスタンス化を必要とせずにアクセスできます。静的として宣言されたプロパティは、インスタンス化されたクラスオブジェクトではアクセスできません(静的メソッドではアクセスできます)。

15
bensiu

いくつかの例... staticキーワードを使用する場合、$ this ..は使用できません。

class Foo{
    private $foo='private';
    private function priv_func(){
        echo 'priv_method';
        }
    public static function ger(){
        echo $this->foo;
        $this->priv_func();
        } 
    }
//class Zero extends Foo{}; 
$obj=new Foo;

$obj->ger();

致命的エラー:オブジェクトコンテキストにないときに$ thisを使用する

4
zloctb