php閉包this
① php有辦法在閉包外部得到閉包內部的變數嗎
php
有閉包函數么?好像么有吧,你可能是想問以下兩種情況
一。外部訪問類的私有變數,可以使用
__get()方法
class
test{
private
$b
=
10;
function
__get($name){
return
$this->$name;
}
}
$a
=
new
test();
echo
$a->b;
二.方法內部訪問全局變數
可以使用global
關鍵字
$b
=
10;
function
test(){
global
$b;
echo
$b;
}
② 如何實際使用PHP5.3閉包語法特性
PHP 5.3閉包語法就是一個匿名函數,可以為開發者帶來很多不同的體驗。與javaScript的閉包相比稍微有點不同,可以這樣使用PHP 5.3閉包語法 $closure = function($param) { echo $param; }; //This one takes value of someVar and "stores" it in
③ php方法中如何獲取閉包的值
親,你好,很高興為你解答該問題
首先,你的這個寫法是有問題的哦!~
classA{
publicfunctionaa(){
//函數體為空,所以外面不會有任何輸出,即使設置變數來接受該方法,也不會有任何返回
//所以你肯定拿不到123
}
}
$a=newA;
$a->aa(function(){//aa方法是不接受任何參數的,這個傳了閉包進去
return123;
});
要想拿到閉包中的123,你需要這樣寫才可以呦~~
classA{
publicfunctionaa($closure){//aa方法接受一個閉包函數進來
return$closure(123);//調用閉包函數,傳入相應參數,並將閉包返回的值再次返回出去
}
}
$a=newA;
$b=$a->aa(function($param){//給aa傳入一個帶一個參數的閉包
return$param;//閉包方法返回傳入的參數
});
var_mp($b);
希望可以幫到你,給我個採納呦!~~
④ php代碼中的this什麼作用
$this->變數名或方法名,指向類中的定義的變數或方法。你這里的var應該是一個變數,但是我們一般不用這個做變數名,因為var在php4中是關鍵字,php5之後用public代替var來申明一個公共變數。
⑤ php中this的含義
下面定義了一個Cart類
<?php
class Cart
{
var $items; // 購物車中的項目
// 把 $num 個 $artnr 放入車中
function add_item ($artnr, $num)
{
$this->items[$artnr] += $num;
}
// 把 $num 個 $artnr 從車中取出
function remove_item ($artnr, $num)
{
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
以一段代碼說明問題,在一個類的定義內部,你無法得知使用何種名稱的對象是可以訪問的:在編寫 Cart 類時,並不知道之後對象的名稱將會命名為 $cart 或者 $another_cart。因而你不能在類中使用 $cart->items。然而為了類定義的內部訪問自身的函數和變數,可以使用偽變數 $this 來達到這個目的。$this 變數可以理解為「我自己的」或者「當前對象」。因而 '$this->>items[$artnr] += $num' 可以理解為「我自己的物品數組的 $artnr 計數器加 $num」或者「在當前對象的物品數組的 $artnr 計數器加 $num」。
⑥ PHP中的閉包有什麼用處
閉包其實就是外部函數定義的內部函數。
閉包的作用及好處:閉包給訪問外部函數定義的內部變數創造了條件。也將關於函數的一切封閉到了函數內部,減少了全局變數,這也是閉包的真實含義。
⑦ php如何序列化/存儲閉包(Closure)
實在需要序列化,可以用反射(Reflection),並直接操作代碼文件獲得上下文信息:/*** 創建一個反射:*/$reflection = new ReflectionFunction($closure);/*** 參數可以直接得到了:*/$params = $reflection-getParameters();/*** 獲得Closure的函數體和use變數,形如: * function($arg1, $arg2, ...) use ($val1, $val2, ...) { * // 要獲得這個部分的代碼!* }* 辦法很多,你可以直接用正則、字元串查找或者Tokenizer,等等等等。 * 比如可以先從reflection里得到函數的開始行和結束行:*/$startLine = $reflection-getStartLine(); $endLine = $reflection-getEndLine(); // 然後用str*這個,str*那個的函數來清理,細節不寫了:
⑧ PHP閉包函數傳參及使用外部變數的方法
本文實例講述了PHP閉包函數傳參及使用外部變數的方法。分享給大家供大家參考,具體如下:
在Laravel控制器寫兩個方法,一個是在內部創建一個閉包函數,一個是執行傳過來的閉包函數,測試閉包的寫法,use使用外部變數,及閉包函數的傳參。如下:
//測試閉包傳參及use使用外部變數
public
function
testClosure($t1,
$t2)
{
$closure
=
function
($param1,
$param2)
use
($t1,
$t2)
{
echo
$param1.$param2.$t1.$t2;
};
$this->execClosure('test.closure',
$closure);
}
//執行閉包函數
protected
function
execClosure($name,
Closure
$closure)
{
echo
'Closure
func
name:'.$name;
echo
'<br>';
$closure('p1',
'p2');
}
在routes.php添加路由:
復制代碼
代碼如下:Route::get('/test/closure/{t1}/{t2}',['uses'=>'TestController@testClosure']);
訪問www.example.com/test/closure/hehe1/hehe2
瀏覽器輸出結果:
Closure
func
name:test.closure
p1p2hehe1hehe2
轉自:小談博客
http://www.tantengvip.com/2016/03/php-closure-use/
更多關於PHP相關內容感興趣的讀者可查看本站專題:《php操作office文檔技巧總結(包括word,excel,access,ppt)》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
⑨ php中This關鍵字我不明白的地方
注意php是弱類語言。。
他不需要事先定義變數的類型也不須事先聲明才可以用。
所以$this->b=12 相當於你var $b=12。然後直接調用像你寫的echo $this->b;
你的例子裡面var $a=13; 就定義了a的值是13。在類裡面你用
$this->a就表明你調用$a這個值;
其實$this就是在本類中直接調用屬性。千萬不能在後面加$符號;
不知道我的理解對你是否有幫助。。我學PHP也不久。。
搞java其實不錯; java的面向對象這塊很完善。而php則是在php5後才更進一步,並沒有java的強
⑩ php 什麼時候使用閉包
當一個函數需要使用另一個函數內的變數的時候 閉包簡單來說就是能夠讀取其他函數內部變數的函數。