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

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang语言--包的概念、导入与可见性

go中包的概念、导入与可见性 ? 包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。 如同其它一...

3505
来自专栏欧阳大哥的轮子

深入iOS系统底层之XCODE对汇编的支持介绍

一个好的IDE不仅要提供舒适简洁和方便的源代码编辑环境,还要提供功能强大的调试环境。XCODE是目前来说对iOS应用开发支持的最好的IDE(虽然Visual S...

682
来自专栏Crossin的编程教室

Python 中的 time 模块

写代码时,常常会遇到处理时间和日期的问题。在 Python 中,与时间处理最相关的模块是 time 和 datetime。今天我们介绍下 time 模块的常用功...

2628
来自专栏安恒信息

Hacking Team分析(二) 沙箱对抗分析

0x00背景 在Hacking Team泄露的文件中含有不少后门、木马的源码,其中就包含有一些反虚拟机反沙箱的代码, 如scout-win-master中就涉及...

3824
来自专栏python3

python 用户交互

input是个内建函数,具体用法:接收用户输入的内容,输入的字符串,接收到就是字符串;输入的是数字,接收的就是数字

622
来自专栏Felix的技术分享

《一个操作系统的实现》笔记(1)--NASM汇编语法和环境搭建

2543
来自专栏河湾欢儿的专栏

伪类

:link 伪类将应用于未被访问过的链接,与:visited互斥。 :visited 伪类将应用于已经被访问过的链接,与:link互斥。 :hover ...

582
来自专栏猛牛哥的博客

快手(AAU)更新记录v2.9.1.23

1687
来自专栏皮振伟的专栏

[qemu][acpi]acpi overflow的分析

前言: qemu启动之后,打出了log: qemu-system-x86_64: Warning: ACPI tables are larger than 64...

3518
来自专栏有趣的django

7.python常用模块

time模块 常用表示时间方式: 时间戳,格式化的时间字符串,元组(struct_time) UTC(Coordinated Universal Time,世界...

35610

扫码关注云+社区