php閉包函數this
A. 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;
}
B. Php7有哪些新特性
PHP 7.4 的主要特性包括以下幾個,
短閉包函數(short closure) 預載入提交性能 屬性類型限定 Improved type variance(不會翻譯) 三元運算簡寫 數組展開運算 新增類的魔術方法:serialization 數字分隔符 運算優先順序 允許在__toString中拋出異常 支持反射引用 新增位元組分割函數 移除php短標簽 棄用左關聯運算符 不再向後兼容的變更 短閉包函數短閉包函數可以減少冗餘代碼:
array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users)需要注意幾點:
短閉包可以直接訪問閉包函數外面的變數,所以不需要再寫?use?關鍵詞 以fn關鍵詞開始 $this?可以像普通的閉包一樣使用 短閉包只有一行代碼,僅僅做返回聲明使用,不允許使用return?關鍵詞還可以使用更嚴格類型的方式
$ids = array_map(fn(User $user): int => $user->id, $user); 預載入PHP預載入可以極大的提高性能
優點:在PHP 7.4以前,如果你使用了框架來開發,每次請求文件就必須載入和重新編譯。預載入在框架啟動時在內存中載入文件,而且在後續請求中永久有效。
缺點:性能的提升會在其他方面花費很大的代價,每次預載入的文件發生改變時,框架需要重新啟動。
屬性類型限定 class A { public string $name; public Foo $foo; }不得不說,PHP越來越接近Java等強類型語言
Improved type variance協變返回類型:
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }依賴(是不是很熟悉):
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 簡寫三元運算符在目前> PHP 7以後的寫法:
$data['date'] = $data['date'] ?? new DateTime(); 在PHP 7.4你可以這樣寫: $data['date'] ??= new DateTime(); 數組展開運算合並數組到另一個數組中,返回一維數組
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]注意? :只對數字索引有效
新增類的魔術方法RFC添加了兩個新的魔術方法__serialize和__unserialize
數字分隔符允許使用下劃線更直觀的分隔數值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 運算優先順序PHP 7.4之前,如果你這樣寫:
echo "sum: " . $a + $b; PHP會解析為: echo ("sum: " . $a) + $b; PHP 8將會解析為: echo "sum :" . ($a + $b); __toString中拋出異常支持反射引用PHP 7.4將會新增ReflectionReference?類
移除php短標簽<?將會在PHP 8中移除,<?=會繼續保留
棄用左關聯運算符PHP遺留了一些奇怪的怪癖,比如
1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確 不再向後兼容的變更 棄用在沒有父類的情況下調用parent:: 調用var_mp列印DateTime和DateTimeImmutableshi』實例,將不再保留對象上的可訪問屬性 openssl_random_pseudo_bytes?會在調用錯誤時拋出異常 序列化PDO和PDOStatement?實例將會生成一個Exception而不是PDOException異常 調用get_object_vars()列印ArrayObject?實例將會返回ArrayObject?自己的屬性,而不是被包裹的數組或對象的值,數組強制轉換不受影響
C. php網站,代碼有一段不知道什麼意思,求大神幫忙(代碼如下)
網友採納的那個回答是個毛線啊?就給你把這段js做了一下格式化。我來給你解釋一下吧:
這個代碼是前端的JS代碼,PHP是後端語言,這個代碼跟PHP沒有卵關系;
這個代碼不是病毒木馬代碼,檢測工具檢測出來紅色大概是因為這個是放在了注釋CDATA塊里。注釋CDATA塊其實是因以前的低端瀏覽器不識別JS代碼而生的,現在完全沒必要再注釋掉了;
你還是不放心的話,那我告訴你,這個代碼是給你隱藏你的真實郵箱的。因為很多發送垃圾郵件的人甚至搜索引擎,都會用爬蟲掃描各個網站的郵箱(因為郵箱格式特徵很明顯),掃到之後就給你發垃圾郵件。所以這個代碼是由PHP簡單的加密之後寫到頁面上一串16進制數字,然後用JS解密出來,爬蟲就掃不到你郵箱了,就這么簡單。
也許採納的那位哥們不服,說這么一段代碼看不出什麼來。那好,我說說每一行的意思。
D. 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);
希望可以幫到你,給我個採納呦!~~
E. php 什麼時候使用閉包
當一個函數需要使用另一個函數內的變數的時候 閉包簡單來說就是能夠讀取其他函數內部變數的函數。
F. php閉包函數用use傳參有什麼意義
PHP語法對於全局變數和局部變數分得太清楚,這里不討論它好與不好,但確實使用起來比較麻煩。在函數裡面調用全局變數,必須global聲明以後,才能使用,其它的語言貌似都能直接用。而use在這里的用法,就是解決這個問題的,有時候不但要傳參數進來,還要調用局部變數進行計算或判斷。舉個例子,你也許更明白:
<?php
functiongetMoney($cny){
$usd=6;//這個局部變數,想在閉包裡面用,必須放到use里
$func=function($jpy)use($cny){
echo$cny.'<br>';//10
echo$jpy.'<br>';//0.1
echo$usd;//否則就報錯,Undefinedvariable:usd
};
$func(0.1);
}
getMoney(10);
G. PHP的幾種函數參數類型及一些特殊函數
給你整理如下:
默認參數:在函數聲明時給參數賦值,而且此默認參數只能在最後,調用時可不傳遞任何參數(若只有默認參數的情況下)
可變參數:一個函數可能需要可個可變數目的參數。在php中,提供了三個函數用於檢索函數中所傳遞的參數。func_get_args()返回一個提供提供給函數的所有參數的數組;func_num_args()返回提供給函數的參數數目;func_get_arg()返回一個來自參數的特定參數。具體如下:
$array = func_get_args();
$count = func_num_args();
$value = func_get_arg();
遺漏參數:當調用函數時,可以傳遞任意個參數給函數。當函數必要的參數沒有i被傳遞時,此參數值是空,並且PHP會為每個遺漏的參數發出警告
可變函數:使用可變變數,可以基於變數的值調用函數
匿名函數:又叫閉包函數,允許臨時建立一個沒有指定名稱的函數,最經常用作回調函數參數的值。需要注意的是,在匿名函數內的變數的用法不同於全局變數,在匿名函數內的變數是一個閉包變數,另外,被調用閉包的作用域不必是相同的。
H. 解釋下php函數的意思$this->是幹嘛呢
$this 是個偽變數,可以理解為「當前對象」,主要是為了類定義的內部訪問自身的函數和變數。
I. PHP中的閉包有什麼用處
閉包其實就是外部函數定義的內部函數。
閉包的作用及好處:閉包給訪問外部函數定義的內部變數創造了條件。也將關於函數的一切封閉到了函數內部,減少了全局變數,這也是閉包的真實含義。
J. PHPMailer中看到的的php函數中使用$this->$value的問題,重點是後面那個美元符
這是所謂的「可變變數」,你這么試一下就知道是怎麼回事了:
class A{
public $name = "張三";
public $age = 19;
public $sex = 'man';
}
$a = "name";
$b = "age";
$c = "sex";
$user = new A();
echo $user->$a;//張三
echo $user->$b;//19
echo $user->$c;//man
實際上這里並不是取$user的a,b,c成員變數,而是取$user的($a)這個變數,而$a就是"name" ,所以$user->$a就是$user->name