當前位置:首頁 » 編程語言 » php閉包函數this

php閉包函數this

發布時間: 2022-09-15 12:35:52

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做了一下格式化。我來給你解釋一下吧:

  1. 這個代碼是前端的JS代碼,PHP是後端語言,這個代碼跟PHP沒有卵關系;

  2. 這個代碼不是病毒木馬代碼,檢測工具檢測出來紅色大概是因為這個是放在了注釋CDATA塊里。注釋CDATA塊其實是因以前的低端瀏覽器不識別JS代碼而生的,現在完全沒必要再注釋掉了;

  3. 你還是不放心的話,那我告訴你,這個代碼是給你隱藏你的真實郵箱的。因為很多發送垃圾郵件的人甚至搜索引擎,都會用爬蟲掃描各個網站的郵箱(因為郵箱格式特徵很明顯),掃到之後就給你發垃圾郵件。所以這個代碼是由PHP簡單的加密之後寫到頁面上一串16進制數字,然後用JS解密出來,爬蟲就掃不到你郵箱了,就這么簡單。

  4. 也許採納的那位哥們不服,說這么一段代碼看不出什麼來。那好,我說說每一行的意思。

    1. 首先是個閉包,懂前端的人都知道。

    2. 然後try一下,是為了謹慎,免得IE彈出頁面腳本有錯誤。

    3. 然後獲取document.currentScript標簽。如果沒有這個屬性的話,就用原始的方法來做,這里又是一個自執行函數(閉包)。

    4. 拿到當前的script標簽,那前一個恰好就是加密標簽了,郵箱就在這個標簽的data-cfemail屬性中,將這個標簽保存成變數為c。

    5. 然後就是解密了。

      1. 解密演算法很簡單,就是一串16進制串,兩兩讀取。

      2. 前兩個讀出來作為密鑰

      3. 從後面每兩個讀出來,和密鑰做異或,之後的值用ASCII讀出字母

      4. 這些字母拼出來的就是你的郵箱

    6. 解密之後創建一個文本節點替換掉原來的加密標簽,就完成了

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

熱點內容
資料庫新聞表 發布:2025-01-11 19:55:23 瀏覽:232
壓縮氣翻譯 發布:2025-01-11 19:42:51 瀏覽:744
安卓如何正確卡槍 發布:2025-01-11 19:29:57 瀏覽:750
米家小相機存儲卡 發布:2025-01-11 19:22:30 瀏覽:699
我的世界如何輸地圖密碼 發布:2025-01-11 19:13:21 瀏覽:226
php表單注冊 發布:2025-01-11 18:43:02 瀏覽:162
虛擬存儲功能 發布:2025-01-11 18:43:01 瀏覽:889
ninjaandroid 發布:2025-01-11 18:26:10 瀏覽:527
華為的編譯器可以用幾個軟體 發布:2025-01-11 18:18:18 瀏覽:620
python中的turtle 發布:2025-01-11 18:06:08 瀏覽:399