php7.0数据库框架_php7介绍

php7介绍

php7介绍

### 安装

实先删除原有的php包:

##查找php包

rpm -qa | grep php

##删除旧有的php包

rpm -e php包名称

以centos环境为例子,安装php7可以使用它官方自带的包进行安装。[安装方法](http://tecadmin.net/install-php-7-on-centos/)

如果您使用的是nginx,nginx相关的配置需要修改。

/etc/php-fpm.d/www.conf这个php-fpm的启动配置里面, 编辑里面的user和group为www 不然会报403错误。

nginx里面的网站配置中 fastcgi_pass 127.0.0.1:9001;和/etc/php-fpm.d/www.conf中的监听地址listen = 127.0.0.1:9001需要一致

sudo /etc/rc.d/init.d/php-fpm restart 重启php-fpm解析器

### 框架性能和升级

框架性能提升

![](/uploads/image/2016/11/06/20161106101157_26599.jpg)

thinkphp3.2能否平滑升级php7?

跑了一遍流程,基本ok。

钱包tp3.2性能对比

7.0版本耗时

![](/uploads/image/2016/11/06/20161106101242_34014.jpg)

5.5版本耗时

![](/uploads/image/2016/11/06/20161106101216_95217.jpg)

### 5.x到7.0的改变

php7中将mysql_*一系列扩展函数移除,然后使用pdo连接mysql。PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据

tp开启pdo模式 http://document.thinkphp.cn/manual_3_2.html#connect_db

可变变量。之前php5.x是按照从右往左解析表达式,建议对于一些有歧义的地方建议使用{}来明确执行顺序,方便迁移到php7.x. php7.x是从左往右解析表达式。

$first =['a'=>['aa'=>'b']];

$b = 'lala';

echo ${$first['a']['aa']};//结果为 lala

echo $first['a']['aa'];//php7中无法解析

call_user_method() 与 call_user_method_array()废除,修改为call_user_function() 与 call_user_method_function() 用法:

function a($b,$c)

{

echo $b;

echo $c;

}

call_user_func('a', "111","222");

call_user_func('a', "333","444");

一些在5.x版本中标记为过时Deprecated的函数,7.x中被删除了

< script language="php"> 这样的标签php7已经不支持了

静态调用一个非静态方法,会在静态调用中被提示未定义 $this ,并会报错。

class A {

public function test() { var_dump($this); }

}

// Note: Does NOT extend A

class B {

public function callNonStaticMethodOfA() { A::test(); }

}

(new B)->callNonStaticMethodOfA();

//php7中输出

Deprecated: Non-static method A::test() should not be called statically in /tmp/test.php on line 8

Notice: Undefined variable: this in /tmp/test.php on line 3

NULL

函数参数命名不允许相同。否则会报Fatal error (E_COMPILE_ERROR)。

function foo($a, $b, $unused, $unused) {

//

}

预定义变量$HTTP_RAW_POST_DATA(接受POST数据的)被移除,使用占用内存更少的php://input来实现. 接受除了 enctype="multipart/form-data" 类型以外的post请求

严格模式。文件最顶部 declare(strict_type=1); 或者php.ini里面开启。作用于函数调用和返回。strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件(为了向下兼容)。

添加4种新的标量类型声明:int,float,string和bool (原来的是Closure和类实例). 用于函数的类型检查.

function sum(int $a, int $b) {

return $a + $b;

}

var_dump(sum(1, 2));

var_dump(sum(1.5, 2.5)); //会报错

??操作符

$username = $_GET['user'] ?? 'nobody';

等于

$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

太空船操作符 返回1 0 -1

`echo $a <=> $b;`

Array 可以用常亮来define了。PHP5.6 之后仅能通过 const 定义

`define('MYARRAY', ['a'=>1,'b'=>2]);`

use some\namespace{ClassA, ClassB, ClassC as C}; 一次性导入多个相同命名空间的类. 类似es6

可以读取Generator的最终返回值了。Generator里面可以嵌套另一个Generator。

匿名类 用后即焚. new class

$app->setLogger(new class implements Logger {

public function log(string $msg) {

echo $msg;

}

});

错误(Error)和异常(Exception)处理的变更. Error exceptions会持续冒出直到匹配到对应的catch块。如果没有进行匹配,就会触发被设置的set_exception_handler()来执行处理,如果没有默认的异常处理程序,则该异常将被转换为一个致命错误,并且将被像一个传统的错误被处理. 继承关系图:

![](/uploads/image/2016/11/06/20161106101319_94367.jpg)

代码示例:

function add(int $left, int $right) {

return $left + $right;

}

try {

echo add('left', 'right');

} catch (Exception $e) {

// Handle exception

} catch (Error $e) { // Clearly a different type of object

// Log error and end gracefully

var_dump($e);

}

错误信息:

string(123) "Argument 1 passed to add() must be of the type integer, string given, called in /alidata/www/h

### 总结

总体感觉php7的执行效率提高很明显,tp被提升了30%左右。

5.x到7.x做到了平滑升级,并贴心的给出了迁移方案。不像python3和python2那样。好的迁移方案是一门语言得以快速发展和升级的前提。

7.x对类型检查和报错信息更加严格和规范了,有点像有静态属性的动态语言。学习了那种强类型语言的特性。

学习了es5, 增加了严格模式的选项。这样喜欢静态特性的人也可以用php7,喜欢动态特性的人可以关掉严格模式。

你可能感兴趣的:(php7.0数据库框架)