「::」演算子は、PHP クラス コードでよく見られます。これは、二重コロン「::」で表されるスコープ制限演算子で、クラス内のさまざまなスコープのレベルを設定するために使用されます。左側はスコープ、右側はアクセス スコープのメンバーです。
php には self とparent という 2 つのスコープが定義されています (静的スコープは php6 で提供されます)。
self: 現在のクラスのスコープを表します。これとは異なり、クラスの特定のインスタンスを表すものではなく、クラス外のコードで Self を使用することはできず、継承における自身の階層位置を識別することもできません。つまり、self が拡張クラスで使用される場合、親クラスのメソッドではなく、拡張クラスのオーバーロードされたメソッドが呼び出されます。
parent: 現在のクラスの親クラスのスコープを示し、それ以外はself属性と同じです。
PHP ダブルコロン::オペレーター:
<?php class forasp{ static $url="http://blog.csdn.net/abandonship"; static $webname = "PHP学习之双冒号的用法"; public function writeurl(){ echo self::$url;//调用自己的内容 } public function writewebname(){ echo "测试子类调用父类内容"; } } class cn extends forasp{ function father(){ parent::wirtewebname(); } } $a = new forasp();//实例化父类 $a->writeurl();//调用自身内容 $b = new cn(); $b->writewebname();//调用父类内容 ?>
静的メソッドを呼び出すときに :: を使用して、クラス内の静的メソッドまたは属性を呼び出すこともできます。これにより、クラスの各インスタンスが部分リソースを占有するため、リソースの使用量を削減できます。 。
static:: スコープは php6 で提案されているため、self:: とparent:: は必要なくなりました。関数を実装する最終クラスを指定する場合は、 static:: を使用します。この修飾子は、コードが実行される直前に継承層の最後のクラスのメンバーを計算します。このプロセスは遅延バインディングと呼ばれます。
「スコープ解決演算子」とも呼ばれる「二重コロン演算子」は、クラス内の静的、const、およびオーバーライドされたプロパティとメソッドにアクセスできます。
クラス定義の外で使用する場合は、クラス名を使用して呼び出します。 PHP 5.3.0 では、クラス名の代わりに変数を使用できます。
プログラムリスト: クラス定義外に変数を使用してアクセス
<?php class Fruit { const CONST_VALUE = 'Fruit Color'; } $classname = 'Fruit'; echo $classname::CONST_VALUE; // As of PHP 5.3.0 echo Fruit::CONST_VALUE; ?>
プログラムリスト: クラス定義外でダブルコロン(::)を使用
<?php class Fruit { const CONST_VALUE = 'Fruit Color'; } class Apple extends Fruit { public static $color = 'Red'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$color . "\n"; } } Apple::doubleColon(); ?>
プログラムの実行結果:
フルーツカラーレッド
プログラムリスト: 親メソッドの hPhp コードを呼び出します
<?php class Fruit { protected function showColor() { echo "Fruit::showColor()\n"; } } class Apple extends Fruit { // Override parent's definition public function showColor() { // But still call the parent function parent::showColor(); echo "Apple::showColor()\n"; } } $apple = new Apple(); $apple->showColor(); ?>
プログラムの実行結果:
fruit :: showcolor ()Apple :: showcolor ()
プログラム:
Php コード
<?php class Apple { public function showColor() { return $this->color; } } class Banana { public $color; public function __construct() { $this->color = "Banana is yellow"; } public function GetColor() { return Apple::showColor(); } } $banana = new Banana; echo $banana->GetColor(); ?>
バナナは黄色
Phpコード
<?php class Fruit { static function color() { return "color"; } static function showColor() { echo "show " . self::color(); } } class Apple extends Fruit { static function color() { return "red"; } } Apple::showColor(); // output is "show color"! ?>
プログラム実行結果:
色を表示