美文网首页
PHP 新特性

PHP 新特性

作者: axjldt | 来源:发表于2020-03-21 11:21 被阅读0次

命名空间 namespace

其作用是按照一种虚拟的层次结构组织PHP代码,现代PHP组件和框架都放在各自全局唯一的厂商命名空间中,以避免常见类名冲突。命名空间还是PSR-4 自动加载的基础

<?php
// 声明命名空间
namespace Symfony\Component\HttpFoundation

// 导入
use Symfony\Component\HttpFoundation\Response;

$response = new Response('Oops',400);
$respons->send();

接口 interface

使用接口编写的代码更灵活,能委托别人实现细节。

<?php
// 定义接口方法
interface Doumentable{
    public function getId();
    public function getContent();
}
<?php
// 接口方法实现1
class HtmlDocument implements Documentable
{
    protected $url;

    public function __construct($url)
    {
        $this->url = $url;
    }

    public function getId()
    {
        return $this->url;
    }

    public function getContent()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $html = curl_exec($ch);
        curl_close($ch);
        return $html;
    }
}
<?php
// 接口方法实现2
class StreamDocument implements Documentable
{
    protected $resource;
    protected $buffer;

    public function __construct($resource, $buffer = 4096)
    {
        $this->resource = $resource;
        $this->buffer = $buffer;
    }

    public function getId()
    {
        return 'resource-' . (int)$this->resource;
    }

    public function getContent()
    {
        $steamContent = '';
        rewind($this->resource);
        while (feof($this->resource) == false) {
            $steamContent .= fread($this->resource, $this->buffer);
        }
        return $steamContent;
    }
}

性状 trait

性状是类的部分实现(即常量,属性和方法),可以混入一个或多个现有PHP类中。性状有两个作用:表明类可以做什么(像是接口);提供模块化实现(像是类)。
性状能把模块化的实现方式注入多个物管的类中,而且还能促进代码重用。

<?php
// 创建形状
trait MyTrait
{
    //这里是性状
}
<?php
class MyClass
{
    use MyTrait;
    // 这里是类的实现
    // 注意:命名空间use 在定义体外,性状在定义体内
}

生成器 generators

与标准的PHP迭代器不同,PHP生成器不要求实现Iterator接口,从而减轻了类的负担。生成器会根据需求计算并产生要迭代的值,不需要占用宝贵的内存,有助于优化性能。
注意:生成器只产出值,没有返回值。无法后退或者快进。而且还是一次性的,无法多次迭代同一个迭代器。不过,如果需要,可以重建或者克隆生成器。

<?php
// 生成器生成一个范围数值
// 一次只会为一个整数分配内存
function makeRange($length)
{
    for ($i = 0; $i < $length; $i++) {
        yield $i;
    }
}

foreach (makeRange(1000000) as $i) {
    echo $i, PHP_EOL;
}
<?php
// 使用生成器处理csv文件
// 每次只会为csv文件中的一行分配内存,不会把整个文件读入内存中,适合读取超大的文件
function getRow($file)
{
    $handle = fopen($file, 'rb');
    if ($handle == false) {
        throw new \Exception();
    }
    while (feof($handle) === false) {
        yield fgetcsv($handle);
    }
    fclose($handle);
}

foreach (getRow('data.csv') as $row) {
    print_r($row);
}

闭包 closure

闭包是指创建时封装周围状态的函数。匿名还是是指没有名称的函数。
理论上闭包和匿名函数是不同的概念,但是PHP将其视作相同的概念。

<?php
// 创建简单的闭包
$closure = function ($name) {
    return sprintf('hello %s', $name);
};
echo $closure("John");
// 输出 --> "hello John"
<?php
 // 使用use附加状态
function enclosePerson($name)
{
    return function ($doCommond) use ($name) {
        return sprintf('%s,%s', $name, $doCommond);
    };
}
// 把字符串 clay 封装到闭包中
$caly = enclosePerson('Clay');
// 传入参数,调用闭包
echo $caly('get me sweet tea');

字节码缓存 Zend OPcache

PHP 是解释型语言,PHP解析器执行PHP脚本时会解析PHP脚本代码,把PHP代码编译成一系列Zend操作码,然后执行字节码。每次HTTP请求都必须不断解析,编译和执行PHP脚本,会消耗很多资源。字节码缓存能存储先编译号的PHP字节码,请求PHPj脚本时PHP解析器会冲内存中读取预先编译好的字节码,然后执行。只有能节省时间,极大地提高性能。

相关文章

  • php5.5 新特性

    php5.5新特性

  • php新特性

    php5.6新特性 参考 使用表达式定义常量,使用const定义常量数组 使用 ... 运算符定义变长参数函数 使...

  • PHP新特性

    PHP5.5新特性 字符串直接表达式 直接通过中括号获取字符串中的单个字符。 foreach和list() for...

  • PHP 新特性

    命名空间 namespace 其作用是按照一种虚拟的层次结构组织PHP代码,现代PHP组件和框架都放在各自全局唯一...

  • 生成器

    PHP Manual手册对于生成器的概述:PHP Manual Generator PHP Manual手册新特性...

  • php7.1加密解密 openssl_encrypt 替代

    1 概况 php7.1发布后新特性吸引了不少PHPer,大家都在讨论新特性带来的好处与便利。但是从php7.0 升...

  • PHP全栈学习笔记2

    php概述 什么是php,PHP语言的优势,PHP5的新特性,PHP的发展趋势,PHP的应用领域。 PHP是超文本...

  • PHP全栈学习笔记2

    php概述 什么是php,PHP语言的优势,PHP5的新特性,PHP的发展趋势,PHP的应用领域。 PHP是超文本...

  • 2018-3月初整理

    1.PHP执行过程2.PHP7新特性 http://php.net/manual/zh/migration70.n...

  • PHP5.5到PHP7的新特性

    PHP5.5到PHP7的新特性 作者:悟尘 一、PHP5.5 官方手册:http://php.net/manual...

网友评论

      本文标题:PHP 新特性

      本文链接:https://www.haomeiwen.com/subject/vekyyhtx.html