程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中雙冒號的應用

php中雙冒號的應用

編輯:關於PHP編程

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

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

self:表示當前類的作用域,與this不同的是它不表示類的某個特定實例,在類之外的代碼中不能使用self,而且它不能識別自己在繼承中層次的位置。也就是說,當在擴展類中使用self時,它調用的不是父類的方法,而是擴展類的重載的方法。


parent:表示當前類父類的作用域,其余的跟self特性一樣。


舉例說明php雙冒號::操作符:

view plaincopy to clipboardprint?
<?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();//調用父類內容  
?> 
<?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:用變量在類定義外部訪問
view plaincopy to clipboardprint?
<?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;
}
$classname = Fruit;
echo $classname::CONST_VALUE; // As of PHP 5.3.0
echo Fruit::CONST_VALUE;
?>

 

Program List:在類定義外部使用雙冒號(::)
view plaincopy to clipboardprint?
<?php  
class Fruit {  
  const CONST_VALUE = Fruit Color;  
}  
class Apple extends Fruit  
{  
  public static $color = Red;  
  public static function doubleColon() {  
    echo parent::CONST_VALUE . " ";  
    echo self::$color . " ";  
  }  
}  
Apple::doubleColon();  
?> 
<?php
class Fruit {
  const CONST_VALUE = Fruit Color;
}
class Apple extends Fruit
{
  public static $color = Red;
  public static function doubleColon() {
    echo parent::CONST_VALUE . " ";
    echo self::$color . " ";
  }
}
Apple::doubleColon();
?>


 

程序運行結果:

Fruit Color Red


Program List:調用parent方法

view plaincopy to clipboardprint?
<?php  
class Fruit  
{  
    protected function showColor() {  
        echo "Fruit::showColor() ";  
    }  
}  
 
class Apple extends Fruit  
{  
    // Override parents definition  
    public function showColor()  
    {  
        // But still call the parent function  
        parent::showColor();  
        echo "Apple::showColor() ";  
    }  
}  
 
$apple = new Apple();  
$apple->showColor();  
?> 
<?php
class Fruit
{
    protected function showColor() {
        echo "Fruit::showColor() ";
    }
}

class Apple extends Fruit
{
    // Override parents definition
    public function showColor()
    {
        // But still call the parent function
        parent::showColor();
        echo "Apple::showColor() ";
    }
}

$apple = new Apple();
$apple->showColor();
?>


程序運行結果:
Fruit::showColor()
Apple::showColor()

 

Program List:使用作用域限定符

view plaincopy to clipboardprint?
<?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
    class Apple
    {
        public function showColor()
        {
            return $this->color;
    &

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved