php中雙冒號的應用

巴扎黑
發布: 2016-11-24 11:02:04
原創
1346 人瀏覽過

php類別程式碼中常看到"::"的運算子,這個是作用域限定運算符,是用一個雙冒號"::"表示,它用來置頂類別中不同作用域的層級。左邊是作用域右邊是訪問作用域的成員。

在php中定義的作用域有self和parent兩種(在php6中提供了static作用域)。

self:表示目前類別的作用域,與this不同的是它不表示類別的某個特定實例,在類別之外的程式碼中不能使用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();//调用父类内容
?>
登入後複製

在呼叫靜態方法中也可以使用::來呼叫類別中的靜態方法或屬性,這樣可以減少資源使用,因為每個類別的實例都會佔有一部分資源。


php6中提出static::作用域,是我們不再需要self::和parent::。希望指向最終的實作功能的類別時,就用static::,這個限定符會在程式碼執行前立即計算出繼承層中最後那個類別的成員,這個過程叫做延遲綁定。

「雙冒號運算子」也或稱為「作用域限定運算子」(Scope Resolution Operator)可以存取靜態、const和類別中重寫的屬性與方法。
在類別定義外使用的話,使用類別名稱呼叫。在PHP 5.3.0,可以使用變數來代替類別名稱。


Program List:用變數在類別定義外部存取

<?php
class Fruit {
  const CONST_VALUE = &#39;Fruit Color&#39;;
}
$classname = &#39;Fruit&#39;;
echo $classname::CONST_VALUE; // As of PHP 5.3.0
echo Fruit::CONST_VALUE;
?>
登入後複製

Program List:在類別定義外部使用雙冒號(::)

<?php
class Fruit {
  const CONST_VALUE = &#39;Fruit Color&#39;;
}
class Apple extends Fruit
{
  public static $color = &#39;Red&#39;;
  public static function doubleColon() {
    echo parent::CONST_VALUE . "\n";
    echo self::$color . "\n";
  }
}
Apple::doubleColon();
?>
登入後複製

程式運作結果:

Fruit Color RedList方法

Php代碼 

<?php  
class Fruit  
{  
    protected function showColor() {  
        echo "Fruit::showColor()\n";  
    }  
}  
  
class Apple extends Fruit  
{  
    // Override parent&#39;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::()


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();  
?>
登入後複製

程式運作結果:

Banana is yellow


Program List:呼叫基類的方法

Php

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!