目錄
1、放弃对Windows XP和2003 的支持  
2.弃用e修饰符  
 3.新增函数和类  
4.一个简单的密码散列API  
5.新的语言特性和增强功能。  
6.调用empty()函数(和其他表达式)一起工作  
7.获取完整类别名称 
8.参数跳跃   
9.标量类型提示   
10.Getter 和 Setter   
11.生成器   
12.列表解析和生成器表达式   
13.finally关键字  
14.foreach 支持list()  
15.增加了opcache扩展  
16.非变量array和string也能支持下标获取了  
首頁 後端開發 php教程 PHP 5.5中的新特性及被弃用的功能函数总结

PHP 5.5中的新特性及被弃用的功能函数总结

Jun 20, 2016 pm 01:03 PM
php函數

PHP5.5新特性及与php5.4的区别总结
现在,让我们来看看PHP5.5 可能会新增的功能:   

1、放弃对Windows XP和2003 的支持  

2.弃用e修饰符  

e修饰符是指示preg_replace函数用来评估替换字符串作为PHP代码,而不只是仅仅做一个简单的字符串替换。不出所料,这种行为会源源不断的出现安全问题。这就是为什么在PHP5.5 中使用这个修饰符将抛出一个弃用警告。作为替代,你应该使用preg_replace_callback函数。你可以从RFC找到更多关于这个变化相应的信息。  

 3.新增函数和类  

boolval()  
PHP已经实现了strval、intval和floatval的函数。为了达到一致性将添加boolval函数。它完全可以作为一个布尔值计算,也可以作为一个回调函数。   
  
hash_pbkdf2()  
PBKDF2全称“Password-Based Key Derivation Function 2”,正如它的名字一样,是一种从密码派生出加密密钥的算法。这就需要加密算法,也可以用于对密码哈希。更广泛的说明和用法示例  
  
array_column()  

$userNames = array_column($users, 'name');  
// is the same as  
$userNames = [];  
foreach ($users as $user) {  
    $userNames[] = $user['name'];  
}  
登入後複製

intl 扩展
将有许多改进 intl的扩展。例如,将会有新的IntlCalendar,IntlGregorianCalendar,IntlTimeZone,IntlBreakIterator,IntlRuleBasedBreakIterator,IntlCodePointBreakIterator类。之前,我竟然不知道有这么多关于intl扩展,如果你想知道更多,我建议你去最新公告里找 Calendar和 BreakIterator。

4.一个简单的密码散列API

$password = "foo";    
// creating the hash    
$hash = password_hash($password, PASSWORD_BCRYPT);    
// verifying a password    
if (password_verify($password, $hash)) {    
    // password correct!    
} else {    
    // password wrong!    
}   
登入後複製

5.新的语言特性和增强功能。

常量引用
“常量引用”意味着数组可以直接操作字符串和数组字面值。举两个例子:

function randomHexString($length) {    
    $str = '';    
    for ($i = 0; $i < $length; ++$i) {    
        $str .= "0123456789abcdef"[mt_rand(0, 15)]; // direct dereference of string    
    }    
}    
function randomBool() {    
    return [false, true][mt_rand(0, 1)]; // direct dereference of array    
}   
登入後複製


我不认为在实践中会使用此功能,但它使语言更加一致。请参阅 RFC。

6.调用empty()函数(和其他表达式)一起工作

目前,empty()语言构造只能用在变量,而不能在其他表达式。
在特定的代码像empty($this->getFriends())将会抛出一个错误。作为PHP5.5 这将成为有效的代码

7.获取完整类别名称

PHP5.3 中引入命名空间的别名类和命名空间短版本的功能。虽然这并不适用于字符串类名称

use Some\Deeply\Nested\Namespace\FooBar;    
// does not work, because this will try to use the global `FooBar` class    
$reflection = new ReflectionClass(&#39;FooBar&#39;);   
echo FooBar::class;  
登入後複製


为了解决这个问题采用新的FooBar::class语法,它返回类的完整类别名称

8.参数跳跃

如果你有一个函数接受多个可选的参数,目前没有办法只改变最后一个参数,而让其他所有参数为默认值。
RFC上的例子,如果你有一个函数如下:

function create_query($where, $order_by, $join_type=&#39;&#39;, $execute = false, $report_errors = true) { ... }  
登入後複製


那么有没有办法设置$report_errors=false,而其他两个为默认值。为了解决这个跳跃参数的问题而提出:

create_query("deleted=0", "name", default, default, false);  
登入後複製


我个人不是特别喜欢这个提议。在我的眼睛里,代码需要这个功能,只是设计不当。函数不应该有12个可选参数。

9.标量类型提示

标量类型提示原本计划进入5.4,但由于缺乏共识而没有做。获取更多关于为什么标量类型提示没有做进PHP的信息,请参阅: 标量类型提示比你认为的更难。
对于PHP5.5 而言,针对标量类型提示讨论又一次出现,我认为这是一个相当不错的 提议。
它需要通过输入值来指定类型。例如:123,123.0,“123”都是一个有效的int参数输入,但“hello world”就不是。这与内部函数的行为一致。

function foo(int $i) { ... }  
foo(1);      // $i = 1  
foo(1.0);    // $i = 1  
foo("1");    // $i = 1  
foo("1abc"); // not yet clear, maybe $i = 1 with notice  
foo(1.5);    // not yet clear, maybe $i = 1 with notice  
foo([]);     // error  
foo("abc");  // error  
登入後複製

10.Getter 和 Setter

如果你从不喜欢写这些getXYZ()和setXYZ($value)方法,那么这应该是你最受欢迎的改变。提议添加一个新的语法来定义一个属性的设置/读取:

<?php  
  
class TimePeriod {  
    public $seconds;  
  
    public $hours {  
        get { return $this->seconds / 3600; }  
        set { $this->seconds = $value * 3600; }  
    }  
}  
$timePeriod = new TimePeriod;  
$timePeriod->hours = 10;  
var_dump($timePeriod->seconds); // int(36000)  
var_dump($timePeriod->hours);   // int(10)  
登入後複製


当然还有更多的功能,比如只读属性。如果你想要知道更多,请参阅 RFC。

11.生成器

目前,自定义迭代器很少使用,因为它们的实现,需要大量的样板代码。生成器解决这个问题,并提供了一种简单的样板代码来创建迭代器。
例如,你可以定义一个范围函数作为迭代器:

<?php  
function *xrange($start, $end, $step = 1) {  
    for ($i = $start; $i < $end; $i += $step) {  
        yield $i;  
    }  
}  
foreach (xrange(10, 20) as $i) {  
    // ...  
}  
登入後複製


上述xrange函数具有与内建函数相同的行为,但有一点区别:不是返回一个数组的所有值,而是返回一个迭代器动态生成的值。

12.列表解析和生成器表达式

列表解析提供一个简单的方法对数组进行小规模操作:
$firstNames = [foreach ($users as $user) yield $user->firstName];
上述列表解析相等于下面的代码:

$firstNames = [];  
foreach ($users as $user) {  
    $firstNames[] = $user->firstName;  
}  
登入後複製


也可以这样过滤数组:

$underageUsers = [foreach ($users as $user) if ($user->age < 18) yield $user];  
登入後複製


生成器表达式也很类似,但是返回一个迭代器(用于动态生成值)而不是一个数组。

13.finally关键字

这个和java中的finally一样,经典的try ... catch ... finally 三段式异常处理。

14.foreach 支持list()

对于“数组的数组”进行迭代,之前需要使用两个foreach,现在只需要使用foreach + list了,但是这个数组的数组中的每个数组的个数需要一样。看文档的例子一看就明白了。

$array = [  
    [1, 2],  
    [3, 4],  
];  
foreach ($array as list($a, $b)) {  
    echo "A: $a; B: $b\n";  
}  
登入後複製

15.增加了opcache扩展  

使用opcache会提高php的性能,你可以和其他扩展一样静态编译(--enable-opcache)或者动态扩展(zend_extension)加入这个优化项。  

16.非变量array和string也能支持下标获取了  

echo array(1, 2, 3)[0];  
echo [1, 2, 3][0];  
echo "foobar"[2];  


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何透過php函數優化圖片懶加載效果? 如何透過php函數優化圖片懶加載效果? Oct 05, 2023 pm 12:13 PM

如何透過PHP函數優化圖片懶載入效果?隨著網路的發展,網頁中的圖片數量越來越多,這給頁面載入速度帶來了壓力。為了提高使用者體驗,減少載入時間,我們可以採用圖片懶載入技術。圖片懶加載可以延遲圖片的加載,只有當用戶滾動到可視區域時才加載圖片,這樣可以減少頁面的加載時間,提升用戶體驗。在編寫PHP網頁時,我們可以透過寫一些函數來優化圖片懶載入效果。下面詳

如何透過php函數來減少記憶體的使用? 如何透過php函數來減少記憶體的使用? Oct 05, 2023 pm 01:45 PM

如何透過PHP函數來減少記憶體的使用在開發中,記憶體的使用是一個很重要的考量。如果在程式中使用大量的內存,可能會導致運行速度變慢甚至程式崩潰。因此,合理地管理和減少記憶體的使用是每個PHP開發者都應該關注的問題。本文將介紹一些透過PHP函數來減少記憶體使用的方法,並提供具體的程式碼範例供讀者參考。使用unset()函數釋放變數在PHP中,當一個變數不再需要時,使用

PHP函數介紹—curl_multi_getcontent(): 取得一個cURL會話的內容 PHP函數介紹—curl_multi_getcontent(): 取得一個cURL會話的內容 Jul 26, 2023 pm 03:01 PM

PHP函數介紹—curl_multi_getcontent():取得一個cURL會話的內容在PHP開發中,我們常常需要透過網路去請求其他伺服器的資料。而cURL(ClientURL)是一個功能強大的PHP擴充庫,用於在PHP中進行網路通訊。 cURL提供了一系列的函數,其中之一就是curl_multi_getcontent(),它用來取得一個cURL會話的

PHP Deprecated: Function ereg_replace() is deprecated - 解決方法 PHP Deprecated: Function ereg_replace() is deprecated - 解決方法 Aug 18, 2023 am 10:48 AM

PHPDeprecated:Functionereg_replace()isdeprecated-解決方法在使用PHP進行開發時,我們經常會遇到一些函數被宣佈為已廢棄(deprecated)的問題。這意味著在最新的PHP版本中,這些函數可能會被刪除或被取代。其中一個常見的例子就是ereg_replace()函數。 ereg_replace

PHP影像處理函數實現圖片編輯和處理功能的方法總結 PHP影像處理函數實現圖片編輯和處理功能的方法總結 Nov 20, 2023 pm 12:31 PM

PHP影像處理函數是一組專門用於處理和編輯影像的函數,它們為開發人員提供了豐富的影像處理功能。透過這些函數,開發人員可以實現圖片的裁剪、縮放、旋轉、浮水印添加等操作,從而滿足不同的圖片處理需求。首先,我將介紹如何使用PHP影像處理函數來實現圖片的裁切功能。 PHP提供了imagecrop()函數,可以用來裁切影像。透過傳遞裁剪區域的座標和大小,我們可以實現圖片的裁

PHP函數介紹:strtr()函數 PHP函數介紹:strtr()函數 Nov 03, 2023 pm 12:15 PM

PHP函數介紹:strtr()函數在PHP程式設計中,strtr()函數是一個非常有用的字串替換函數。它用於將字串中的指定字元或字串替換為其他字元或字串。本文將介紹strtr()函數的用法,並給出一些具體的程式碼範例。 strtr()函數的基本語法如下:strtr(string$str,array$replace)其中,$str是要進行替換運算的原始字

PHP 函數與其他語言函數的比較 PHP 函數與其他語言函數的比較 Apr 10, 2024 am 10:03 AM

PHP函數與其他語言的函數有相似之處,也有一些獨特之處。在語法上,PHP函數用function聲明,JavaScript用function聲明,Python用def聲明。參數和傳回值方面,PHP函數可接受參數並傳回一個值,JavaScript和Python也有類似功能,但語法不同。範圍上,PHP、JavaScript和Python的函數均具有全域或局部範圍,全域函數可從任意位置訪問,局部函數只能在其聲明作用域內存取。

PHP函數的效能如何? PHP函數的效能如何? Apr 18, 2024 pm 06:45 PM

不同PHP函數的效能對應用程式效率至關重要。效能較好的函數包括echo、print,而str_replace、array_merge、file_get_contents等函數效能較慢。例如,str_replace函數用於替換字串,性能中等,而sprintf函數用於格式化字串。效能分析表明,執行一個範例僅需0.05毫秒,證明了函數效能良好。因此,明智地使用函數可以建立更快、更有效率的應用程式。

See all articles