---恢复内容开始---

  后台一大堆半成品,或者是几乎不成的。。。

这本书不错,起码是别人推荐的,然后也是比较新的东西,学哪本不是学嘛,关键是得看。

今儿个网不好,科研所需的代码下不到,看书做笔记吧。

这本书基本将的是5.4版本后的一些新变化,写的浅显易懂,虽然鄙人走的还不顺溜,跑一跑也摔不到哪儿去,跑累了我有的是走的机会~~

(一)特性

一、命名空间

一个文件一个类,用了命名空间方便互相调用;

  1. //
  2. //Namespace
  3. //
  4. namespace ModernPHP\feature\mingmingkongjian;
  5. function var_dump(){
  6. echo "Shit!"."</br>";
  7. }
  8.  
  9. $test="OK";
  10. var_dump($test);
  11. \ModernPHP\feature\mingmingkongjian\var_dump();
  12.  
  13. //命名空间必须顶头,但一个文件中可以有很多命名空间,然后也可以有子空间
  14. //厂商的命名空间是最顶层的命名空间,用于识别品牌
  15. //旨在解决命名冲突的问题,当然现在应该有比较灵活的其他用法
  16.  
  17. //一个比较实用的点:导入和别名
  18. //导入另一个文件夹下的类定义,直接用
  19. require 'index.php';
  20. use a\aaa;
  21. $daoru=new aaa;
  22. $daoru->send();
  23. //use是导入,然后在use中设置最懒的别名
  24. //另外,5.6版本后可以实现use 函数
  25. // use func a\call;
  26. // \a\call();

index.php

  1. <?php
  2. namespace a;
  3. class aaa{
  4. public function send(){
  5. echo "ok";
  6. }
  7. }
  8.  
  9. function call(){
  10. echo "func_use is successful.";
  11. }

二、使用接口

接口,本来没太懂,看懂了之后简直了,牛逼啊!

一个接口,大家只要遵守接口规定,就都能用,就这么个意思。

下面是一个获得内容的接口示例,还可以写更多基于此接口的模块;(其中,模块中getContent的我基本都不会。。。哭)

  1. <?php
  2. //
  3. //Chapter2.P19
  4. //Feature_Interface
  5. //
  6. namespace ModernPHP\feature\jiekou;
  7.  
  8. class DocumentStore{
  9. protected $data=[];
  10.  
  11. public function addDocument(Documentable $document){ //这里注明只能使用接口的参数
  12. $key=$document->getID();
  13. $value=$document->getContent();
  14. $this->data[$key]=$value;
  15. }
  16.  
  17. public function getDocuments(){
  18. return $this->data;
  19. }
  20. }
  21.  
  22. interface Documentable{ //定义接口,说白了就是定规矩,其他地方要用,就得说一声
  23. public function getId();
  24.  
  25. public function getContent();
  26. }
  27.  
  28. class HtmlDocument implements Documentable{ //声明要用接口;这个是获得url的内容的
  29. protected $url;
  30.  
  31. public function __construct($url){
  32. $this->url=$url;
  33. }
  34.  
  35. public function getId(){
  36. return $this->url;
  37. }
  38.  
  39. public function getContent(){
  40. $ch=curl_init(); //这里的curl是针对url进行操作一个库(相当于)。这个命令是开启一个curl对话,所以下面这些都是一个对话
  41. curl_setopt($ch, CURLOPT_URL, $this->url);
  42. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  43. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3);
  44. curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
  45. curl_setopt($ch,CURLOPT_MAXREDIRS,3);
  46. $html=curl_exec($ch); //由这个命令执行刚才的对话
  47. curl_close($ch);
  48.  
  49. return $html;
  50. }
  51. }
  52.  
  53. $documentStore=new DocumentStore();
  54.  
  55. $htmlDoc=new HtmlDocument('http://www.baidu.com');
  56. $documentStore->addDocument($htmlDoc);
  57.  
  58. print_r($documentStore->getDocuments());

另一个模块

  1. class StreamDocument implements Documentable{ //流媒体
  2. protected $resource;
  3. protected $buffer; //缓冲区大小
  4.  
  5. public function __construct($resource,$buffer=4096){
  6. $this->resource=$resource;
  7. $this->buffer=$buffer;
  8. }
  9.  
  10. public function getId(){
  11. return 'resource-'.(int)$this->resource;
  12. }
  13.  
  14. public function getContent(){
  15. $streamContent='';
  16. rewind($this->resource); //rewind() 函数将文件指针的位置倒回文件的开头
  17. while (feof($this->resource)===false){ //feof() 函数检测是否已到达文件末尾 (eof)。
  18. $streamContent.=fread($this->resource,$this->buffer);
  19. }
  20.  
  21. return $streamContent;
  22. }
  23. }

 三、性状

奇怪的东西。。。

其实就是为了多重继承或者一对多个不同的类别吧

  1. <?php
  2. //
  3. //Chapter2.P23
  4. //Feature_Trait
  5. //性状
  6. //
  7.  
  8. //前面说的接口,是针对同类型的东西,实现相同的功能的;
  9. //这里的性状是针对不同的东西,实现相同的功能
  10.  
  11. //基本用法如下
  12. trait traitName{
  13. public function testThis(){
  14. echo "This is how trait works."."<br/>";
  15. }
  16. }
  17.  
  18. trait traitMore{
  19. public function testAgain(){
  20. echo "This is multiple use."."<br/>";
  21. }
  22. }
  23.  
  24. class className{
  25. use traitName;
  26. use traitMore;
  27.  
  28. }
  29.  
  30. $classMine=new className();
  31. $classMine->testThis();
  32. $classMine->testAgain();

 四、生成器

直接上代码

  1. <?php
  2. //
  3. //Chapter2.P26
  4. //Feature_Generator
  5. //生成器
  6. //
  7.  
  8. //其实就是在函数中使用了yield语句的东西
  9. //优点在于节省了内存使用情况
  10. //方法是通过动态分配内存进行循环操作
  11. //典型用处是处理csv类数据文件
  12.  
  13. namespace ModernPHP\feature\shengchegnqi;
  14.  
  15. function getRows($file){
  16. $handle=fopen($file,'rb');
  17. if ($handle===false){
  18. throw new Exception(); //抛出错误原因
  19. }
  20. while (feof($handle)===false) {
  21. yield fgetcsv($handle);
  22. }
  23. fclose($handle);
  24. }
  25.  
  26. foreach (getRows('data.csv') as $row){
  27. print_r($row);
  28. echo "<br/>";
  29. }
  30. //当数据文件很大时,效果尤其明显

 五、闭包

这里闭包基本等于匿名函数

  1. <?php
  2. //
  3. //Chapter2.P29
  4. //Feature_ClosePatch
  5. //闭包或匿名函数
  6. //
  7.  
  8. //把函数当作是变量
  9. //然后它就可以像变量一样用来用去了。。
  10. //常用做函数和方法的回调
  11.  
  12. namespace ModernPHP\feature\bibao;
  13. $var=function ($name){
  14. return sprintf('Hello %s',$name);
  15. };
  16.  
  17. echo $var('Andy');
  18.  
  19. //做回调
  20. $array=[2,3,4];
  21. $num=array_map(function ($number){ //array_map,将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组
  22. return $number+1;
  23. },$array);
  24. print_r($num);

六、附加状态

这个没搞懂。。。

(二)标准

PHP-FIG的一些约定俗成;

---类名称,驼峰式,ShitHappens

---方法名称,驼峰式,但首字母小写,shitHappens

---缩进统一为4个空格

---不写?>结束符号;

---{另起一行;

---命名空间要有空格;

---类中属性和方法必须有可见性声明;

---if等控制性结构后面有空格;

  1. <?php
  2. //
  3. //Chapter3.P44
  4. //PHP-FIG puts PSRs
  5. //
  6.  
  7. namespace ModernPHP\standard\realize;
  8.  
  9. use ModernPHP\feature\bibao;
  10. use ModernPHP\feature\fujiazhuangtai;
  11.  
  12. class ShitHappens
  13. {
  14. public $a;
  15.  
  16. public function suck()
  17. {
  18. if ($this->a===false){
  19. return true;
  20. }
  21. }
  22. }

----------------------

后面的都是讲述的东西,有需要的我再写吧。

MordenPHP阅读笔记(一)——先跑再说,跑累了再走的更多相关文章

  1. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

  2. Hadoop阅读笔记(一)——强大的MapReduce

    前言:来园子已经有8个月了,当初入园凭着满腔热血和一脑门子冲动,给自己起了个响亮的旗号“大数据 小世界”,顿时有了种世界都是我的,世界都在我手中的赶脚.可是......时光飞逝,岁月如梭~~~随手一翻 ...

  3. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  4. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  5. 【unix网络编程第三版】阅读笔记(五):I/O复用:select和poll函数

    本博文主要针对UNP一书中的第六章内容来聊聊I/O复用技术以及其在网络编程中的实现 1. I/O复用技术 I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程.I/O ...

  6. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  7. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  8. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  9. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

随机推荐

  1. 使用Yeoman快速启动AngularJS项目开发

    本博客停止更新,请访问新个人博客:owenchen.net 前言 博客迁移到了BAE上,http://owenchen.net/,以后的文章会首发在自己的博客上,随后在博客园发布. 很久没有写文章了, ...

  2. JSCapture – 基于 HTML5 实现的屏幕捕捉库

    JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库.它可以让从您的浏览器中截图和记录在桌面的视频.JSCapture 使用 getUserMedia 来实现屏幕捕获.目 ...

  3. Vis.js – 基于浏览器的动态 JavaScript 可视化库

    Vis.js 是一个动态的,基于浏览器的可视化库.该库被设计为易于使用,能处理大量的动态数据.该库由以下几部分组成:一是数据集和数据视图,基于灵活的键/值数据集,可以添加,更新和删除项目,订阅数据集变 ...

  4. 15个最佳的代码评审(Code Review)工具

    代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...

  5. CSS3中DIV水平垂直居中-2(3)

    用到CSS3中display的新属性. HTML <div class="parent"> </div> CSS html,body{ width: 100 ...

  6. angular路由配置用法

      在如今,很多事用于HTML5嵌套在webview,成为(伪)app,用a链接来跳转,简单页面来说的话,速度还是可以的,但是应用越来越多,是用不流畅,当然原生的app像安卓以及IOS来说的话,跳转是 ...

  7. go语言 类型:数组切片

    初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切 ...

  8. JavaScript 左右上下自动晃动,自动移动。

    最近做了一个项目,本来用css3动画做的,不兼容ie,用js做了个,分享给大家. 代码修改了下,上下左右四个模块,顺时针转动. <!DOCTYPE html> <html> & ...

  9. 获取设备IMEI ,手机名称,系统SDK版本号,系统版本号

    1.获取设备IMEI TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); Str ...

  10. iOS 多线程 浅述

    什么是进程? 进程是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 什么是线程? 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程 ...