MordenPHP阅读笔记(一)——先跑再说,跑累了再走
---恢复内容开始---
后台一大堆半成品,或者是几乎不成的。。。
这本书不错,起码是别人推荐的,然后也是比较新的东西,学哪本不是学嘛,关键是得看。
今儿个网不好,科研所需的代码下不到,看书做笔记吧。
这本书基本将的是5.4版本后的一些新变化,写的浅显易懂,虽然鄙人走的还不顺溜,跑一跑也摔不到哪儿去,跑累了我有的是走的机会~~
(一)特性
一、命名空间
一个文件一个类,用了命名空间方便互相调用;
//
//Namespace
//
namespace ModernPHP\feature\mingmingkongjian;
function var_dump(){
echo "Shit!"."</br>";
} $test="OK";
var_dump($test);
\ModernPHP\feature\mingmingkongjian\var_dump(); //命名空间必须顶头,但一个文件中可以有很多命名空间,然后也可以有子空间
//厂商的命名空间是最顶层的命名空间,用于识别品牌
//旨在解决命名冲突的问题,当然现在应该有比较灵活的其他用法 //一个比较实用的点:导入和别名
//导入另一个文件夹下的类定义,直接用
require 'index.php';
use a\aaa;
$daoru=new aaa;
$daoru->send();
//use是导入,然后在use中设置最懒的别名
//另外,5.6版本后可以实现use 函数
// use func a\call;
// \a\call();
index.php
<?php
namespace a;
class aaa{
public function send(){
echo "ok";
}
} function call(){
echo "func_use is successful.";
}
二、使用接口
接口,本来没太懂,看懂了之后简直了,牛逼啊!
一个接口,大家只要遵守接口规定,就都能用,就这么个意思。
下面是一个获得内容的接口示例,还可以写更多基于此接口的模块;(其中,模块中getContent的我基本都不会。。。哭)
<?php
//
//Chapter2.P19
//Feature_Interface
//
namespace ModernPHP\feature\jiekou; class DocumentStore{
protected $data=[]; public function addDocument(Documentable $document){ //这里注明只能使用接口的参数
$key=$document->getID();
$value=$document->getContent();
$this->data[$key]=$value;
} public function getDocuments(){
return $this->data;
}
} interface Documentable{ //定义接口,说白了就是定规矩,其他地方要用,就得说一声
public function getId(); public function getContent();
} class HtmlDocument implements Documentable{ //声明要用接口;这个是获得url的内容的
protected $url; public function __construct($url){
$this->url=$url;
} public function getId(){
return $this->url;
} public function getContent(){
$ch=curl_init(); //这里的curl是针对url进行操作一个库(相当于)。这个命令是开启一个curl对话,所以下面这些都是一个对话
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_MAXREDIRS,3);
$html=curl_exec($ch); //由这个命令执行刚才的对话
curl_close($ch); return $html;
}
} $documentStore=new DocumentStore(); $htmlDoc=new HtmlDocument('http://www.baidu.com');
$documentStore->addDocument($htmlDoc); print_r($documentStore->getDocuments());
另一个模块
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(){
$streamContent='';
rewind($this->resource); //rewind() 函数将文件指针的位置倒回文件的开头
while (feof($this->resource)===false){ //feof() 函数检测是否已到达文件末尾 (eof)。
$streamContent.=fread($this->resource,$this->buffer);
} return $streamContent;
}
}
三、性状
奇怪的东西。。。
其实就是为了多重继承或者一对多个不同的类别吧
<?php
//
//Chapter2.P23
//Feature_Trait
//性状
// //前面说的接口,是针对同类型的东西,实现相同的功能的;
//这里的性状是针对不同的东西,实现相同的功能 //基本用法如下
trait traitName{
public function testThis(){
echo "This is how trait works."."<br/>";
}
} trait traitMore{
public function testAgain(){
echo "This is multiple use."."<br/>";
}
} class className{
use traitName;
use traitMore; } $classMine=new className();
$classMine->testThis();
$classMine->testAgain();
四、生成器
直接上代码
<?php
//
//Chapter2.P26
//Feature_Generator
//生成器
// //其实就是在函数中使用了yield语句的东西
//优点在于节省了内存使用情况
//方法是通过动态分配内存进行循环操作
//典型用处是处理csv类数据文件 namespace ModernPHP\feature\shengchegnqi; function getRows($file){
$handle=fopen($file,'rb');
if ($handle===false){
throw new Exception(); //抛出错误原因
}
while (feof($handle)===false) {
yield fgetcsv($handle);
}
fclose($handle);
} foreach (getRows('data.csv') as $row){
print_r($row);
echo "<br/>";
}
//当数据文件很大时,效果尤其明显
五、闭包
这里闭包基本等于匿名函数
<?php
//
//Chapter2.P29
//Feature_ClosePatch
//闭包或匿名函数
// //把函数当作是变量
//然后它就可以像变量一样用来用去了。。
//常用做函数和方法的回调 namespace ModernPHP\feature\bibao;
$var=function ($name){
return sprintf('Hello %s',$name);
}; echo $var('Andy'); //做回调
$array=[2,3,4];
$num=array_map(function ($number){ //array_map,将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组
return $number+1;
},$array);
print_r($num);
六、附加状态
这个没搞懂。。。
(二)标准
PHP-FIG的一些约定俗成;
---类名称,驼峰式,ShitHappens
---方法名称,驼峰式,但首字母小写,shitHappens
---缩进统一为4个空格
---不写?>结束符号;
---{另起一行;
---命名空间要有空格;
---类中属性和方法必须有可见性声明;
---if等控制性结构后面有空格;
<?php
//
//Chapter3.P44
//PHP-FIG puts PSRs
// namespace ModernPHP\standard\realize; use ModernPHP\feature\bibao;
use ModernPHP\feature\fujiazhuangtai; class ShitHappens
{
public $a; public function suck()
{
if ($this->a===false){
return true;
}
}
}
----------------------
后面的都是讲述的东西,有需要的我再写吧。
MordenPHP阅读笔记(一)——先跑再说,跑累了再走的更多相关文章
- Hadoop阅读笔记(七)——代理模式
关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...
- Hadoop阅读笔记(一)——强大的MapReduce
前言:来园子已经有8个月了,当初入园凭着满腔热血和一脑门子冲动,给自己起了个响亮的旗号“大数据 小世界”,顿时有了种世界都是我的,世界都在我手中的赶脚.可是......时光飞逝,岁月如梭~~~随手一翻 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
- “CoreCLR is now Open Source”阅读笔记
英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...
- 【unix网络编程第三版】阅读笔记(五):I/O复用:select和poll函数
本博文主要针对UNP一书中的第六章内容来聊聊I/O复用技术以及其在网络编程中的实现 1. I/O复用技术 I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程.I/O ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
随机推荐
- [Cordova] 无法显示Alert视窗
[Cordova] 无法显示Alert视窗 问题情景 今天开了一个Cordova专案做范例,将预设的index.html页面修改为下列内容.按下执行却发现,这样一个简单的范例无法正常执行.点击页面上的 ...
- 验证:mysql AUTO_INCREMENT 默认值是1
用mongodb时,有些字段需要做自增,而且是用二十进制字母表示(使用a-t对应0-19),做了一个_auto_increment字段用来保存,但是应该从0开始还是从1开始呢? 和mysql保持一致便 ...
- 【JavaScript】Write和Writeln的区别
目录结构: Write和Writeln的区别 如何查看Writeln的换行效果 参考文章 Write和Writeln的区别 Write不可以换行,Writeln可以换行. 如何查看Writeln的换行 ...
- js中如何获取纯正的undefined?
1.为什么要获取undefined? 因为undefined在javascript中不是保留字,可以被用户当做变量来赋值,这样如果我们后期需要用到undefined来检测一个变量的话,那么检测的值就不 ...
- Java实现---堆排序 Heap Sort
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先讲解下什么是数据结构中的二叉堆. 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关 ...
- Android 图片的合成
本文实现在Android下图片的合成 布局设计比较简单: <RelativeLayout xmlns:android="http://schemas.android.com/apk/r ...
- 【代码笔记】iOS-浮动的云
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- 最近项目用到Dubbo框架,临时抱佛脚分享一下共探讨。
1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...
- C#程序猿电脑重装记录
最近比较空了,闲的手痒,将自己的笔记本进行了重装,之前每次重装都没有记录,这次将本次重装过程记录下来,以便下次参考 1 首先不用说了WIN7旗舰版装好,驱动装好 2 开启Administrator用户 ...
- yii过滤xss代码,防止sql注入
作者:白狼 出处:www.manks.top/article/yii2_filter_xss_code_or_safe_to_database 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明 ...