


A brief discussion on the major new features of php7_php skills
So far, PHP has officially released the RC5 version of php7, and the first official version is expected to be released around November! Now, the major features of php7 have definitely been finalized and there will be no further changes. The iterations of some subsequent versions are mainly bug fixes, optimizations and the like. Let’s talk about the major changes in php7 that we have been looking forward to. . .
Preview of new features
ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG 增加抽象语法树,使编译更加科学 64位的INT支持 统一的变量语法 原声的TLS - 对扩展开发有意义 一致性foreach循环的改进 新增 <=>、**、?? 、u{xxxx}操作符 增加了返回类型的声明 增加了标量类型的声明 核心错误可以通过异常捕获了 增加了上下文敏感的词法分析
Some features removed
1. Removed some old extensions and migrated them to PECL (for example: mysql)
2. Remove support for SAPIs
3. Tags like and language="php" have been removed
4.Hexadecimal string conversion has been abolished
//PHP5 "0x10" == "16" //PHP7 "0x10" != "16"
5.HTTP_RAW_POST_DATA has been removed (you can use php://input instead)
6. Static functions no longer support calling a non-static function through an incompatible $this
$o = & new className{}, this writing method is no longer supported
7. The php.ini file has removed # as a comment and uses ; to comment
Some behavioral changes
No longer supports function definition parameters with the same name
The use of the constructor with the same name of the type is no longer recommended (it has not been removed currently and will be removed later)
Keywords such as String, int, float, etc. cannot be used as class names
func_get_args() gets the value of the current variable
function test ($num) { $num++; var_dump(func_get_args()[0]); }; test(1) //PHP5 int(1) //PHP7 int(2)
The following is a selection of some main, core, and important features for us PHPer to introduce
PHP NG
The new php engine has optimized many places, and it is precisely because of this that the performance of php7 has been improved nearly twice compared to php5!
Reconstruction of ZVAL structure
On the left is the zval of PHP5 (24 bytes), and on the right is the zval of PHP7 (16 bytes);
It can be seen that the zval of php7 is more complicated than that of php5, but it can be reduced from 24 bytes to 16 bytes. Why?
In C language, each member variable of struct occupies an independent memory space, while the member variables in union share a memory space (union is widely used to replace struct in php7). Therefore, although it seems that there are a lot more member variables, the actual memory space occupied by many of them is public and has decreased.
Replace the previous HashTale structure with the new Zend Array
The most used, most useful, most convenient and most flexible thing in our PHP program is the array, and the bottom layer of PHP5 is implemented by HashTable. PHP7 uses the new Zend Array type, which has better performance and access speed. Significant improvement!
Some very commonly used functions with low overhead are directly transformed into opcodes supported by the engine
call_user_function(_array) => ZEND_INIT_USER_CALL is_int/string/array/* => ZEND_TYPE_CHECK strlen => ZEND_STRLEN defined => ZEND+DEFINED
Uses new memory allocation and management methods to reduce memory waste
Optimization of core sorting zend_sort
//PHP5 - 快速排序(非稳定排序) array(1 => 0, 0 => 0) //PHP7 - 快速排序+选择排序(稳定排序) array(0 => 0, 1 => 0)
For elements less than 16, use selection sorting. For elements larger than 16, divide them into units of 16, use selection sorting respectively, and then combine them all and use quick sorting. Compared with the previous sorting, the internal elements have been changed from unstable sorting to stable sorting, which reduces the number of exchanges of elements and the number of operations on memory, and improves performance by 40%
Abstract syntax tree
If we have such a need now, we need to perform syntax detection on the PHP source file and implement coding standards. Before php5, there was no AST, and opcodes were generated directly from the parser! We need to use some external php syntax parsers to achieve this; and php7 adds AST, we can implement such an extension ourselves, and use the functions provided by the extension to directly obtain the AST structure corresponding to the file, and this structure is what we It can be identified, so we can do some optimization and judgment on this basis.
64-bit INT support
Supports storage of strings larger than 2GB
Supports uploading files larger than 2GB
Ensure that strings on all platforms [64-bit] are 64bit
Unified syntax variables
$$foo['bar']['baz'] //PHP5 ($$foo)[‘bar']['baz'] //PHP7: 遵循从左到右的原则 ${$foo[‘bar']['baz']}
Improvements of foreach loop
//PHP5 $a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));} int(2) int(2) int(2) $a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));} int(2) int(3) bool(false) $a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));} int(1) int(1) int(1) //PHP7:不再操作数据的内部指针了 $a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))} int(1) int(1) int(1) $a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a)) int(1) int(1) int(1) $a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))} int(1) int(1) int(1)
Several new operators
//<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】 echo 1 <=> 2;//-1 echo 1 <=> 1;//0 echo 1 <=> 0;//1 // ** - 【a的b次方】 echo 2 ** 3;//8 //?? - 三元运算符的改进 //php5 $_GET['name'] ? $_GET['name'] : '';//Notice: Undefined index: … //php7 $_GET['name'] ?? '' -> ''; //\u{xxxx} - Unicode字符的解析 echo "\u{4f60}";//你 echo "\u{65b0}";//新
Declaration of return type
function getInt() : int { return “test”; }; getInt(); //PHP5 #PHP Parse error: parse error, expecting '{'... //PHP7 #Fatal error:Uncaught TypeError: Return value of getInt() must be of the type integer, string returned
Declaration of scalar types
function getInt(int $num) : int { return $num; }; getInt(“test”); //PHP5 #PHP Catchable fatal error: Argument 1 passed to getInt() must be an instance of int, string given… //PHP7 #Fatal error: Uncaught TypeError: Argument 1 passed to getInt() must be of the type integer, string given…
Core errors can be caught through exceptions
try { non_exists_func(); } catch(EngineException $e) { echo “Exception: {$e->getMessage();}\n”; } //这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。 #Exception: Call to undefined function non_exists_func()
Sensitive lexical analysis
//PHP5 class Collection {public function foreach($arr) {}} #Parse error: parse error, expecting `"identifier (T_STRING)”'... //PHP7 class Collection { public function foreach($arr) {} public function in($arr){} public function where($condition){} public function order($condition){} } $collection = new Collection(); $collection->where()->in()->foreach()->order();
That’s almost it. I’ve basically finished my preliminary understanding of php7. There must be many wrong and low-level mistakes in it. I hope you guys can correct them in time so that I can correct them and take notes! hey-hey!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

PHP logging is essential for monitoring and debugging web applications, as well as capturing critical events, errors, and runtime behavior. It provides valuable insights into system performance, helps identify issues, and supports faster troubleshoot

Laravel's service container and service providers are fundamental to its architecture. This article explores service containers, details service provider creation, registration, and demonstrates practical usage with examples. We'll begin with an ove

The article discusses adding custom functionality to frameworks, focusing on understanding architecture, identifying extension points, and best practices for integration and debugging.
