PHPにおけるOOの静的キーワードおよびクラス定数の詳細を検討する

2183 ワード

暇な時に適当にPHPのOOについての点の資料を探して見て、アクセス制御の修飾子、self、parent、const、staticのいくつかのキーワード、矢印オペレータ(本でもそう呼ばれています.->です.)、範囲解析オペレータ(二重コロン:::))と思いますが、これはC#言語のOOが多いのと同じような気がします.分かりやすいと思いますが、PHPのOOの考え方を整理するのは当然でしょう.静的クラスのメンバーとメソッドを宣言し、クラスのインスタンスを必要としない.staticメンバーの宣言は、静的メソッドでは可能ですが、クラスオブジェクトのインスタンスからアクセスできません.静的宣言は、可視性宣言の後にする必要があります.PHP 4に対応するために、可視性が宣言されていない場合、メンバーおよびメソッドはpublicとして宣言されたものとみなされる.静的メソッドは非オブジェクトインスタンスを呼び出すことができるため、擬似変数$thisは静的と宣言されたメソッドでは使用できません.実際にstaticメソッド呼び出し形式はコンパイル時に決定される.宣言するクラス名を使用する場合は、継承ルールを完全に識別し、適用しません.宣言するクラス名を使用すると、このメソッドは完全に確認され、継承されたルールは使用されません.selfが宣言された場合、selfは現在属するクラスによって解釈されます.継承ルールも適用されません.静的プロパティは矢印オペレータ->では使用できません.非静的メソッドにアクセスすると、E_が生成されます.STRICT級の警告.
 
  
class Foo
{   public static $my_static='foo';
    public function staticValue(){   return self::$my_static;   }
}
class Bar extends Foo
{   public function fooStatic(){   return parent::$my_static;   }
}
print Foo::$my_static."/n";
$foo = new Foo();
print $foo->staticValue()."/n";
print $foo->my_static."/n";// Undefined "Property" my_static
// $foo::my_static is not possible
print Bar::$my_static."/n";
$bar = new Bar();
print $bar->fooStatic()."/n";
?>
 
  
// (Static method example)
class Foo
{   public static function aStaticMethod() {    }
}
Foo::aStaticMethod();
?>

各ベースクラスで定数を定義して、一定に保つことができます.$記号を使用して宣言または使用しない場合、定数は通常の変数とは異なります.静的メンバーのように、定数値はオブジェクトのインスタンスからアクセスできません($object::constantを使用します).定数値は、変数、クラスのメンバー、数学式または関数呼び出しの結果ではなく、定数式でなければなりません.
 
  
class MyClass
{   const constant = 'constant value';
    function showConstant() {   echo  self::constant."/n";   }
}
echo MyClass::constant."/n";
$class = new MyClass();
$class->showConstant();// echo $class::constant; is not allowed
?>