標籤:php 靜態變數
在C 中,記憶體分成5個區,他們分別是堆、棧、自由儲存區(程式碼區)、全域/靜態儲存區和常量儲存區。1.棧,就是那些由編譯器在需要的時候分配,在無需的時候自動清除的變數的儲存區。裡面的變數通常是局部變數、函數參數等。由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。2.堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個new就要對應一個delete。假如程式員沒有釋放掉,那麼在程式結束後,作業系統會自動回收。一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。3.自由儲存區(程式碼區),就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,但是他是用free來結束自己的生命的。存放函數體的二進位代碼。4.全域/靜態儲存區,全域變數和靜態變數被分配到同一塊記憶體中,在以前的C語言中,全域變數又分為初始化的和未初始化的,在C 裡面沒有這個區分了,他們一起佔用同一塊記憶體區。全域變數和靜態變數的儲存是放在一塊的,初始化的全域變數和靜態變數在一塊地區, 未初始化的全域變數和未初始化的靜態變數在相鄰的另一塊地區。 - 程式結束後由系統釋放5.常量儲存區,這是一塊比較特別的儲存區,他們裡面存放的是常量,不允許修改,常量字串就是放在這裡的。 程式結束後由系統釋放<?php Class Person{ // 定義靜態成員屬性 public static $country = "我是靜態變數"; // 定義靜態成員方法 public static function myCountry() { // 內部訪問靜態成員屬性 echo "我是靜態方法訪問靜態變數:".self::$country."<br />";//self訪問本身的類,這裡是Person類 //::是範圍限定操作符,這裡用的是self範圍,而不是$this範圍,$this範圍只表示類的當前執行個體,self::表示的是類本身。 } } class Student extends Person { function study() { echo "我繼承的靜態方法訪問靜態變數:". parent::$country."<br />"; //parent是指向父類的指標,一般我們使用parent來調用父類的建構函式。parent 表示訪問父級的屬性或方法 } } // 通過類名訪問輸出成員屬性值 echo Person::$country."<br />"; // 輸出:我是靜態變數 //echo $p1->country; // 錯誤寫法 // 通過類名訪問靜態成員方法 Person::myCountry(); // 輸出:我是靜態方法訪問靜態變數:我是靜態變數 // 通過對象訪問靜態方法: $p1 = new Person(); $p1->myCountry();//輸出:我是靜態方法訪問靜態變數:我是靜態變數 // 子類中輸出成員屬性值 // 通過類名訪問成員屬性值 echo Student::$country."<br />"; // 輸出:我是靜態變數 // 通過類名訪問靜態成員方法 Student::myCountry(); // 通過對象訪問靜態方法: $t1 = new Student(); $t1->study(); // 輸出:我繼承的靜態方法訪問靜態變數:我是靜態變數 //PHP中this,self,parent的區別http://www.cnblogs.com/myjavawork/articles/1793664.html
本文出自 “IT技術” 部落格,請務必保留此出處http://linuxubuntu.blog.51cto.com/4964714/1795871
php靜態變數小結