PHP实用功能——modern PHP读书笔记(一)

时间:2022-05-03
本文章向大家介绍PHP实用功能——modern PHP读书笔记(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

PHP实用功能——modern PHP读书笔记

(原创内容,转载请注明来源,谢谢)

一、命名空间

1、命名空间按照虚拟的层次结构组织PHP代码,类似操作系统的目录结构。

2、定义命名空间的方式放在<?php后的第一行(除注释外),如果有需要导入的命名空间,其代码放于定义的后面,PHP解释器会将命名空间作为前缀加到类、接口、函数、常量名称前。

3、方式:

定义:namespace 路径二级路径.....; 这里的路径指的是虚拟的路径

导入:use 路径文件名(不用路径)类名 [as 别名]; 这里as可以重命名类名。

从PHP5.6开始,支持导入常量和方法,方法如下:

1)导入方法:use func…functionname;

2)导入常量:useconstant …constname;

4、不建议一个文件中定义两个命名空间。

5、如果定义了一个命名空间,那么在该文件中如果调用PHP原生类,则需要在类前面加入一个反斜杠,以此表示根命名空间下的类。例如要调用PHP的Exception类,应采用Exception()的方式。

二、性状(trait) PHP5.4

1、使用场景

当两个完全无关的类,需要实现同一个方法,则采用性状的方式最为合适。例如,现有汽车类和大楼类这两个类,都需要添加一个定位的功能,如果在两个类中分别去实现,代码重复率高,而且当有需要修改的时候还需要分别去修改,比较麻烦,则可以使用trait的方式进行操作。

2、使用方法

定义:

traittesttrait{
    private $testprop;
public function testfunc(){
}
}

使用:

class testclass{
         use testtrait;
    public functiontestclassfunc(){
                   $this->testfunc();
}
}

三、生成器(generator) PHP5.5

1、优势

当需要操作大文件、大数组等占用大量内存的工作时,使用生成器,会对文件的逐行、数组的逐个内容进行读取,并且仅开辟一个内存空间,节省了大量的内存。

2、生成器相当于简化版的迭代器,它只能逐个读取,不能读取上一个,也不能快进,不能进行查询某一个内容,对于需要逐个操作的场景使用广泛,但是对于需要退后、快进等的场景则还是需要使用PHP SPL迭代器,或者自己写类来实现Iterator接口。

3、使用方式(关键字 yield)

定义:

functiontestfunc(){
    for($i=0;$i<=100000;$i++){
                   yield $i;
}
}

使用:(只能使用foreach使用)

foreach(testfunc as $num){
         echo $num;//会输出0-100000
}

上述场景中,如果使用常规的数组来接收0-100000,则需要一个空间为100001的数组用于保存内容,占用大量的空间。但是使用yield,则每次只用一个空间为1的数组来保存内容,当foreach到下一个内容时,仍使用该内存。

四、闭包PHP5.3

1、闭包与匿名函数在PHP中是同一个概念,都是PHPClosure类的实例,闭包函数设计的初衷是为了增加函数的复用性。

2、使用方式

定义:

         $test= function($a){return $a+1;}

使用:

         echo$test(1);//输出结果为2

3、当变量后面出现括号(),即当尝试以调用函数的方式调用一个对象时,则PHP会自动调用魔术方法__invoke()。

__invoke()示例:

classtestinvoke{
   publicfunction __invoke($x){
      echo $x;
}
}
$test = newtestinvoke();
$test(‘a’); //输出 a

4、在闭包中使用use(),可以使用闭包之外的变量,并且当闭包函数执行完毕时该变量仍在。

functiongetNames($lastname){
    returnfunction($firstname) use ($lastname){
         return $firstname.’’.$lastname;
}
}
$name =getNames(‘hxx’);
echo$name(‘lin’);//输出linhxx

5、闭包函数中使用bindTo()方法

五、Zend Opacache 字节码缓存(PHP 5.5)

该内容后续文章中讲解,先挖个坑。

六、PHP内置的web服务器

除了常用的Apache、Nginx外,PHP内部也有web服务器,但由于该服务器每次只能处理一个请求,不适用于生产系统,但是对于开发调试还是可以使用。

1、开启: php –s localhost:8000

2、加载自定义配置文件 php –s localhost:8000–c app/confing/php.ini

3、PHP查询当前使用的服务器名称的方式

         echophp_sapi_name();//使用内置服务器,会输出 cli_server

——written by linhxx 2017.06.25