Home >Backend Development >PHP Tutorial >Detailed analysis of the new version of PHP 5.3_PHP Tutorial

Detailed analysis of the new version of PHP 5.3_PHP Tutorial

WBOY
WBOYOriginal
2016-07-13 17:08:24885browse

1. mysql tutorial driver mysqlnd For a long time, PHP tutorials have been connecting to MySQL through the MySQL client. Now MySQL has officially launched the PHP version of the MySQL client, and this MySQLnd can effectively reduce memory usage and improve performance. For details, see: http://dev.mysql.com/downloads/connector/php-mysqlnd/ http://forge.mysql.com/wiki/PHP_MYSQLND As can be seen from the figure, using mysqlnd eliminates the step of copying data from the mysql driver to the php extension. Mysqlnd uses copy-on-write, which means copy-on-write and read-reference. mysqlnd has been built into the source code of php5.3. When compiling, use --with-mysql=mysqlnd, --with-mysqli=mysqlnd and --with-pdo-mysql=mysqlnd to install the mysqlnd driver. Advantages of mysqlnd Compiling PHP is more convenient, no need for libmysql, it is already built into the source code

  1. Compiling PHP is more convenient, no need for libmysql, it is already built into the source code
  2. Use php license to avoid copyright issues
  3. Use PHP memory management and support PHP memory limit (memory_limit)
  4. There is only one copy of all data in the memory. The previous libmysql had two copies. Refer to the picture above
  5. Provides performance statistics function to help analyze bottlenecks
  6. mysqli supports persistent connections
  7. The performance is definitely faster than libmysql
  8. Add caching mechanism in driver layer
After seeing so many features, I feel a bit contradictory. Can PDO, as the abstraction layer of the database tutorial, bring out the features of different backends? If you use mysql as the database, is mysqli a better choice? I always feel that mysqli is just an excessive product, and PDO is the future. 2. Performance improvement
  1. md5() probably improves performance by 10%-15%
  2. Better stack implementation in the engine, I don’t understand
  3. Constants are stored in ROM (Constants moved to read-only memory), I don’t understand the meaning here
  4. Improve exception handling and make the opcode more concise
  5. Solved the problem of repeatedly opening include(require)_once. Before, I used static variables to implement once, and finally solved this problem
  6. Binaries compiled with gcc4 will be smaller
  7. Overall performance improved by 5%-15%
Many people think that the bottleneck of the web is the db, so they don't care about the performance of the app. I think it is mainly because app expansion is much easier than db expansion, so the db bottleneck occurs, but this does not mean that we can ignore the app's performance. Performance, after all, will ultimately solve various problems in the app. As a programmer, writing high-quality code is the most basic requirement. Programs that use less memory and execute faster are very effective under high concurrency. Sometimes if you change the implementation method, it is normal to increase it dozens of times. Of course, if you have to pay a lot but get little, Don't be too persistent. I think you must have the awareness to write high-quality code. 3. ?:Operator In fact, it is || in js. The returned result is not a logical type, but the value of the original variable. For example, false ?: 123 returns 123, not true. The syntax is a bit weird!

4. Namespace

This is a very good function. Before it was added, prefixes were used to solve naming pollution. The method was a bit copycat, haha.
5. Late Static Binding I estimate that the static nature of PHP is fixed during pre-compilation, so when inheriting, self in the parent class refers to the parent class, not the subclass. PHP5.3 adds a new syntax, static, which can capture the current class at runtime. A typical example is the singleton mode:
class ParentClass {    <br>static private $_instance;   <br>private function __construct() {   <br>}   <br>static public function getInstance() {   <br>if (!isset(self::$_instance)) {   <br>self::$_instance = new self();   <br>}   <br>return self::$_instance;   <br>}   <br>}
If you inherit this parent class, the singleton of the subclass must override the getInstance of the parent class. 5.3 supports using static to delay binding, but unfortunately, even if there is a static keyword, new static cannot be used to instantiate it, but there is a workaround.
class ParentClass {    <br>static private $_instance;   <br>private function __construct() {   <br>}   <br>static public function getInstance() {   <br>if (!isset(self::$_instance)) {   <br>$class = static::getClass();// 使用static延迟绑定   <br>self::$_instance = new $class();   <br>}   <br>return self::$_instance;   <br>}   <br>static public function getClass() {   <br>return __CLASS__;   <br>}   <br>}
这个新特性当前可能会有问题存在,暂时不建议使用。 六、新的魔法函数__callStatic 其实就是__call的静态版,调用的静态方法不存在会调用这个魔法函数,但是低效 七、通过变量调用静态(Variable Static Calls) 以前可以通过变量调用对象的方法,例如$instance->$method();,而静态方法不支持,5.3后就支持了可以通过$someClass::$method()调用了,但是低效。 八、日期函数date_create_from_format 把字符串转换成时间戳,如果使用strtotime的话,日期格式是php解析的,而5.3的date_create_from_format可以设置字符串的日期格式,
$date = strtotime("08-01-07 00:00:00");//php 认为格式 是年-月-日   <br>var_dump(date("Y-m-d", $date)); // string(10) "2008-01-07"  <br>$date = date_create_from_format("m-d-y", "08-01-07");//告诉php格式是 月-日-年 <br>var_dump($date->format('Y-m-d')); // string(10) "2007-08-01"
九、匿名函数(Lambda functions)和闭包(closures) js有个很爽的地方就是支持函数式编程,php很不爽的地方就是函数太过正规了,不过5.3后php更自由了。 定义匿名函数的语法
$lambda = function () { echo "Hello World!n"; };
function replace_spaces ($text) {   <br>$replacement = function ($matches) {   <br>return str_replace ($matches[1], ' ', ' ').' ';   <br>};   <br>return preg_replace_callback ('/( +) /', $replacement, $text);   <br>}
function replace_spaces ($text) {   <br>return preg_replace_callback ('/( +) /',   <br>function ($matches) {   <br>return str_replace ($matches[1], ' ', ' ').' ';   <br>}, $text);   <br>}
产生闭包的语法
function (normal parameters) use ($var1, $var2, &$refvar) {}
引入了use语法,并且支持引用变量 十、新魔法常量__DIR__ 以前只有__FILE__,为了得到当前文件所在的路径,都是用dirname(__FILE__)来得到的,现在可以用__DIR__代替了 十一、NOWDOC php定义字符串有一种格式叫定界符.
$foo = <<this is $fubar <br>ONE;
这种方式称为HEREDOC,php会解析里面的变量,而有时候我们不需要解析变量,5.3加入了NOWDOC,其实就是定界符的单引号版
$bar = <<<'TWO' this is $fubar TWO;
这样,php只把它当作字符串,变量不会解析 十二、GC 因为php本身工作机制的原因,所以php的GC机制只要高效就够了,允许少量内存泄漏,毕竟程序执行完毕就会释放所有申请的内存,根本不会有内存泄漏的问题,但这只是对于短暂运行的程序而言,如果用php编写持久执行就要考虑内存泄漏问题了。
php的GC机制采用引用计数机制,引用计数是很简单高效的GC机制,不过缺点也很明显,不能完全回收所有已无效的变量,例如变量相互引用了,就无法回收了,5.3里加入的GC函数,其实就是起到增强GC机制的作用。
gc_enable(); // 激活GC,增强GC机制,回收循环引用的无效变量 <br>var_dump(gc_collect_cycles()); // 强制回收已无效的变量 <br>gc_disable(); // 禁用GC

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/629847.htmlTechArticle一、mysql教程驱动mysqlnd 一直以来,php教程都是通过mysql客户端连接mysql,而现在mysql官方已经推出php版的mysql客户端,而这个mysqlnd有效降低内...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn