1. 程式人生 > >php中const與static的區別與使用

php中const與static的區別與使用

首先關於const 在php的類內部只可以修飾成員屬性,不可以修飾方法,如下:

class Test{
	const PATH = 'c/';//修飾常量
	const function test(){//這種方法是錯誤的,const無法修飾方法
	}
}
const在使用的時候不需要新增許可權修飾字段,但是在呼叫const修飾的常量時是需要技巧的,因為常量是屬於整個類的,而不是屬於某個物件,所以在呼叫的時候需要使用類名加域名修飾符,例:
echo Test::PATH;
//也可以使用下面的方法呼叫
$test = new Test();
echo  $test::PATH;
但是在類內部呼叫的時候就會出現問題,如何在類內部獲取當前類名或者當前物件名(php可以根據物件獲取類名-反射),php中給我們提供了兩個特殊的關鍵字,如:
class Test{
	const PATH = 'c/';//修飾常量
	public function ass(){
		echo $this::PATH.'<br />';
		echo self::PATH.'<br />';
	}
}
其中self(不加$)代表當前類名,$this代表當前物件。這樣,我們就可以在類內部呼叫const修飾的常量了。

接下來我們說說static 

const雖然很好用,但是一經定義就無法修改值了,但是有的時候我們需要一個屬於類的屬性,但是又可以修改其值,比如統計此類構造了幾個物件,這個時候就是使用static的時候了,在static修飾類的成員變數的時候,它的使用方法基本與const一樣,區別就在於static修飾的屬性可以新增許可權(7.1的php中const也可以新增,以前的不能),並且static修飾的成員變數的值是可以修改的。

但是當static修飾成員方法的時候,使用方法有一點改變,在類的內部,static修飾的方法體內部,無法訪問當前類的任何普通成員變數,準確的來說是無法使用關鍵字$this,只可以使用當前類的靜態成員變數,和類常量。

class Test{
	static public $name='asd';
	const π = 3.1415926;
	public $age = 10;
	public static function lenth($r){
		//echo $this->age;//會發生錯誤,不能訪問普通的成員變數
		echo Test::$name;
		return $r*2*self::π;
		
	}
	public static function area($r){
		return $r*$r*self::π;
	}	
}

在使用static的過程中,呼叫的方法與呼叫static修飾的變數不同,既可以通過類名呼叫,也可以通過物件名呼叫,比如:
echo '周長:'. Test::lenth(1).'<br/>';
echo '面積:'.Test::area(1).'<br/>';
$per = new Test();
echo $per->lenth(3);

以上這兩種呼叫方式都是合法的。

因為遇到了問題,所以在下就研究了一下,將測試成果分享一下,有不對的望請指出!


相關推薦

phpconststatic區別使用

首先關於const 在php的類內部只可以修飾成員屬性,不可以修飾方法,如下:class Test{ const PATH = 'c/';//修飾常量 const function test(){//這種方法是錯誤的,const無法修飾方法 } } const在使用的

phpconstdefine的使用區別

     常量是一個簡單值的識別符號(名字)。如同其名稱所暗示的,在指令碼執行期間該值不能改變(除了所謂的魔術常量,它們其實不是常量)。常量預設為大小寫敏感。通常常量識別符號總是大寫的。     可以用 define() 函式來定義常量。在 PHP 5.3.0 以後,可

static 靜態方法 有什麼優缺點 PHP靜態方法(static)非靜態方法的使用及區別

static方法是類中的一個成員方法,屬於整個類,即使不用建立任何物件也可以直接呼叫! 靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷燬,而例項化的則可以做銷燬。 靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體。 C

iOSconststatic區別和聯絡

const就是隻讀的意思,只在宣告中使用; static一般有2個作用,規定作用域和儲存方式.對於區域性變數,static規定其為靜態儲存方式,每次呼叫的初始值為上一次呼叫的值,呼叫結束後儲存空間不釋放; 對於全域性變數,如果以檔案劃分作用域的話,此變數只在當前檔案可見;對

phpecho(),print(),print_r(),var_dump()var_export()間的區別

echo()函式:輸出一個或多個字串。 輸出所有引數。不會換行。 echo 不是一個函式(它是一個語言結構), 因此你不一定要使用小括號來指明引數,單引號,雙引號都可以。 echo (不像其他語言構造)不表現得像一個函式, 所以不能總是使用一個函式的上下文。 另外,如果

PHPheader頭設定Cookie內建setCookie的區別

首先宣告,瀏覽的Cookie操作都是通過HTTP Header(俗稱“Http頭”) 來實現。所有的伺服器與客戶端之間Cookie資料傳輸都是通過Http請求頭來操作。 PHP中setCookie(函式的實現),就是對HTTP頭進行封裝,由此看來 使用 header

php對象類型數組之間的轉換

from ech php json simple imp 對象 rom AD 1.剛看視頻學習的時候看到一個困擾很久的問題, 有時候我們在進行做項目的時候會碰到的一個小問題。舉一個小例子。 獲取一個xml文件裏面的數據。 xml.xml文件如下:

php的func_num_args、func_get_argfunc_get_args函數

返回函數 函數定義 lse https sheng use second hive bar https://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/21/2183157.html php的的func_num_ar

PHPconst跟define的區別

在PHP中,定義常量有兩種方式: const、define 詳細說下他們的區別: 1、const是表示式賦值定義一個常量,而define是一個函式,他接受三個引數 2、const對定義的常量大小寫敏感,而define可以通過函式的第三個引數來控制是否大小寫敏感 3、const可以

json和python的字典的區別聯絡

json: json是一種資料的表現形式,是一種資料格式:比如在ajax中的資料接收型別,一般都是json型別的資料格式,也會有txt的資料格式;如下程式碼所示: $.ajax({ url: '/change_data', type: 'GET'

php 關鍵詞final,static的用法 順便也說下php->跟::的區別 做個筆記

一. final 的用法很簡單,定義類的時候 就是阻止子類繼承 貼程式碼 final class base{ public function test(){ echo 'this is final'; } } 任何類都不能繼承base類,如果繼承就會丟擲錯誤 定義方法的

關於Python***的區別使用

(*)與(**)的區別         一個星(*)表示將引數作為元組來處理;兩個星(**)表示將引數作為字典來處理。 例項 a)在函式引數列表中使用         在函式引數列表中使用*或者**表示將呼叫時傳入的引數組合成一個元組或是字典,然後在

C++char型別string區別聯絡

C++中內建了一些基本型別,包含算數型別和空型別。 算數型別(arithmetic type)包含字元、整數型、布林型和浮點數。其中基本的字元型別是char型別,最小尺寸為8位位元組。 C++除了內建型別外,還有抽象資料型別庫,而string則是其中重要的一個標準庫型別。S

PHPeval函式的危害正確禁用方法

php的eval函式並不是系統元件函式,因此我們在php.ini中使用disable_funct

PHPconst和define()定義常量的細節區別

眾所周知,在PHP中(PHP 4及以後),我們可以使用函式define()來定義常量,例如: <?php define('PI',3.14159);//定義一個名為PI的常量 echo PI;//輸出:3.14159 ?> 不過,在PHP

PHP註解(Annotation)的定義使用

註解的定義:略 近期,框架中使用了註解來實現許可權的控制 1.註解的使用 /** * 列表及搜尋 * @funcName 院所管理-院所列表 */ public function index() {

php使用while、eachlist函式組合遍歷二維陣列的方法

        在php中,系統為程式設計師提供了包括for迴圈、foreach()語句以及while、each與list函式組合遍歷陣列的三種方法。其中,由於for迴圈只能對索引值是連續的索引陣列進行遍歷而不能成為遍歷陣列的首選方法。而while、each與list函式組

PHP this self static區別

轉載自:https://blog.csdn.net/mrzhouxiaofei/article/details/78648079引入最近在做軟體工程的課程設計,碰到一個問題,去扒 Laravel 原始碼,又搜尋一番,發現是對 self static 的理解不深,才出現了問題,所以記錄下來,避免再次犯同樣的錯誤

jsonbluronfocus函式的幾點區別聯絡

之前寫的js事件onblur和focus裡面認為是物件失去焦點的同時獲得焦點,而由於onblur會在事件完成後再來一次所以導致的死迴圈是我猜測錯了。 雖然確實是因為onblur和focus死迴圈引起的,不過是1物件的onblur後重新獲得焦點時導致2物件的onblur,如此迴圈所致。測試程式碼如下。 <

PHP$_SERVER的詳細引數說明

PHP中$_SERVER引數說明 $_SERVER['PHP_SELF'] #當前正在執行指令碼的檔名,與 document root相關。 $_SERVER['argv'] #傳遞給該指令碼的引數。 $_SERVER['argc'] #包含傳遞給程式的命