本文實例分析了PHP程序設計中閉包的概念機用法,分享給大家供大家參考。具體分析如下:
通常來說,閉包也就是PHP的匿名函數, 但是和函數不同的是,閉包可以通過use使用函數聲明時所在作用域的變量的值。
具體形式如下:
$a = function($arg1, $arg2) use ($variable) { // 聲明函數閉包到變量$a, 參數為$arg1, $arg2 ,該閉包需使用$variable變量 }
具體用法實例如下:
<?php $result = 0; $one = function() { var_dump($result); }; $two = function() use ($result) { var_dump($result); }; // 可以認為 $two這個變量 本身記錄了該函數的聲明以及use使用的變量的值 $three = function() use (&$result) { var_dump($result); }; $result++; $one(); // outputs NULL: $result is not in scope $two(); // outputs int(0): $result was copied $three(); // outputs int(1) ?>
希望本文所述對大家PHP程序設計的學習有一定的借鑒與幫助作用。
有幾個書寫錯誤,現在已經訂正!
$arr = $this->GetRecord($SQL);//這不是調用父類中的方法嗎?
我跟你說過,什麼叫繼承,就是說子類擁有父類的所有成員(在可繼承的情況下),你可以通過作用域連接符使用父類成員,也可以通過$this關鍵字(靜態的,私有的不行!!!!!)!!!!!!!
怎樣來認識面向對象編程:
給你舉個例子:
class student{
public $name;
public statics $age;
public function set_name($name){
$this->name=$name;//這是正確的
self::$name=$name;//正確
$name=$name;//這句錯誤
}
public function set_age($age){
$this->age=$age;//錯誤
self::$age=$age;//正確
}
}
//為什麼會這樣呢,也就是說,如果你要在類裡面另外的成員,那麼你就要通過
//$this關鍵字,或者作用域解析符,但是如果是靜態成員,不能使用$this訪問,來引用它,不能像普通的代碼一樣直接使用.
$this->name你可以這樣理解,學生的名字,也就是說$this代表的就是類名
class boy_student extents students{
//這個類擴展自students,也就是說有students類的所有成員,
//當然你也可以添加students沒有的成員
$aadress;
:
:
:
//如果你要應用父類的方法:可以這樣:
parent::set_name(....)
//當然這裡涉及到的東西足足可以寫成一本書,不是說有的父類成員都能子類訪問,有些甚至連繼承都不行,這裡涉及到可見性的問題!
}
*********************************
$this->xxx 實例化來調用的嗎?
*******************************
這不是實例化,什麼叫實例化,就是說,剛才我們定義的是一個抽象的東西,就像學生,他是一個類別;
$zhangshan = new students();
這才是實利化,明白嗎!
::是靜態訪問方式,只和類本身相關而和類對象沒有關系,所以直接調用是類名::方法名
因為PHP語言本身就是一個不夠嚴謹的語言(或者換句話說,比較靈活),所以當一個方法只要是public並且該方法中沒有使用代表對象的$this就可以使用::來調用,php在解析的時候會自動將其以靜態方法解析調用。當然在PHP5以後,就引入了static public function func(){}這種方式聲明,所以如果在PHP5上,並且報錯機制是比較全的話,直接調用一個沒有static聲明的方法的時候,就會提示一個notic了···
建議不要這用樣,除非你聲明的是靜態方法!