php notes
1. foreach中的引用
<?php $arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
foreach ($arr as $value) {
echo $value.", ";
} ?>
输出2,4,6,8.
如果去掉&就不对了:
<?php $arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
$value = $value * 2;
} unset($value); // 最后取消掉引用
foreach ($arr as $value) {
echo $value.", ";
} ?>
输出1,2,3,4
2. foreach基本用法:[ref]
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $age) {
echo $age,'<br />';
}
?>
运行该例子输出:
18
20
25
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $key=>$age) {
echo $key,': ',$age,'<br />';
}
?>
运行例子输出:
wang: 18
li: 20
zhang: 25
3. unset()函数销毁变量 [ref]
4. PHP类中set和get方法 [ref]
5. PHP操作数据库 [ref]
6. 继承 extends
PHP中继承是单一继承,不同于C++中的多继承。
7. self
self类似与$this关键字,但$this是需要类实例化以后才可以使用,self 可以直接访问当前类中的内部成员。
注意:因为没有实例化的类访问内部属性或者方法是没有意义的,所以self一般用来访问类中的:静态成员,常量,或者其他定义内容。
可参看此文。
8. static
static可以在类未被实例化时使用,静态属性单独占用内存而不会因创建多个对象而导致同样的方法或者属性重复占用。
-- 类内部访问静态成员:
类名称 : : 静态成员
self : : 静态成员
-- 类外部访问静态成员:
类名称 : : 静态成员
9. const
const用来定义类中的常量,类似PHP外部定义常量的关键字define();
常量不用$符。
10. 接口 interface
接口:一种成员属性全部为抽象的特殊抽象类。
---接口和抽象类之间的区别:
-抽象类: 1、类中至少有一个抽象方法
2、抽象方法前需加abstract -接口: 1、类中全部为抽象方法
2、抽象方法前不用加abstract
3、接口抽象方法属性为public
4、成员属性必须为常量
---接口和抽象类之间的共同点:
1、本身都不能被实例化,必须被继承或者引用
2、继承或者引用后,需要把所有抽象方法重载方可使用
注意接口引用implement与类继承extends的区别。继承只能是单一性,接口的implement引用可以有多个引用。
继承父类、引用接口 并存时:先继承后接口。
接口也可以extends继承接口。
其他属性可以看一下php100的ppt。
11. php源代码文件的组织、引用
参考《PHP和MySQL Web开发》的Ch5,有详细讲require和include。
12. use用法 [ref]
13. composer [ref]
14. 3个等号:[ref]
简单的说,两个等号是模糊等于也就是一般的等于,在php中不同的类型也是可以比较的,而这点在其他的强类型语言中是不行的。三个等号表示全等于,不但数值一样,而且类型也相同 比如你一个函数会返回这几种情况:
1、大于0的数
2、小于0的数
3、等于0的数(也就是0啦)
4、False(失败时)
这时候如果你想捕获失败的情况,你就必须用===,而不能用==
因为==除了会匹配第4种情况外,还会匹配第3种情况,因为0也是假!
15. 匿名函数 closure [ref ref2(赞)]
16. trait [ref]
对于PHP來說,在使用use关键字時,PHP只是將trait的所有变量与函数「复制」进class內,让class馬上拥有trait的所有功能。
[ref2]写的很清晰,推荐。
依赖倒置原则、控制反转[ref] (这篇讲的最清晰!)
依赖倒置原则(Dependence Inversion Principle, DIP)
DIP是一种软件设计的指导思想。传统软件设计中,上层代码依赖于下层代码,当下层出现变动时, 上层代码也要相应变化,维护成本较高。而DIP的核心思想是上层定义接口,下层实现这个接口, 从而使得下层依赖于上层,降低耦合度,提高整个系统的弹性。这是一种经实践证明的有效策略。 控制反转(Inversion of Control, IoC)
IoC就是DIP的一种具体思路,DIP只是一种理念、思想,而IoC是一种实现DIP的方法。 IoC的核心是将类(上层)所依赖的单元(下层)的实例化过程交由第三方来实现。 一个简单的特征,就是类中不对所依赖的单元有诸如 new 的实例化语句。 依赖注入(Dependence Injection, DI)
DI是IoC的一种设计模式,是一种套路,按照DI的套路,就可以实现IoC,就能符合DIP原则。 DI的核心是把类所依赖的单元的实例化过程,放到类的外面去实现。
https://www.sitepoint.com/dependency-injection-with-pimple/ Class A depends on class B. If class B is not available then the above code will not work. Moreover, every time we hard code the creation of an object inside a class, we are making a concrete dependency to that class. Concrete dependencies are a barrier to writing testable code. A better way is to provide an object of class B to class A. These objects can be provided through A’s constructor or a setter method.
ref 这篇讲的也非常好!
总结:当A需要B时,不要直接在A里new (), 而是传递一个B的对象作为参数给A。
---------------------------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
真实的容器可以实现自动绑定(Autowiring)或 自动解析(Automatic Resolution)、注释解器(Annotations)、延迟注入(Lazy injection)等功能,都要学习一下。
pimple容器:ref
注意,在用pimple时,和使用普通的匿名函数并不一样。
以ref3的这段代码为例:
$container['session_storage'] = function ($c) {
return new SessionStorage('SESSION_ID');
};
$container['session'] = function ($c) {
return new Session($c['session_storage']);
};
先看其中第一段代码,如果是对于匿名函数而言,$x = function($param){SOME CODE}; 那么$x里存的是匿名函数本身。匿名函数并不执行,只有在出现“$x(参数)”时才执行。
但是在这里,
$container['session_storage'] = function ($c) {SOME CODE};
这里=右边的部分,当前container会作为参数传递给$c, 并执行该匿名函数,然后将该匿名函数的返回值new SessionStorage('SESSION_ID')存入container('session_storage')里。
18. 容器
对容器赋值并不是像C++那样赋值,而是把部分东西
19. 魔术常量 [ref]
20. 后期静态绑定 [ref]
21. 几种设计模式:工厂,DAO,xxx
<head first设计模式>
22. php反射机制 [ref]
23. pimple库的用法:ref
24. monolog 【ref】
25.
<1> PDO
PDO和prepared statement介绍[ref0]
prepared statement 预处理语句 [ref]
<2>FluentPDO [ref] 写的非常好!
fluentPDO在test里看实例,有doc里没说过的用法。
26.
<1> DAO & VO [ref] (此文超级赞)
DAO+VO组成MVC中的Model。(ref中说的)
可以google一下"php dao"看一下其他相关文章,能学到更多知识。
[ref]为yiiframework里面对DAO的介绍。
<2> MVC模式/框架 (Model-view-controller)
PHP MVC框架:ref
yii doc中介绍MVC: ref
27. PHP相关设计模式 [ref]
admin intro: [ref3]
php notes的更多相关文章
- ASP.NET Core 1.1.0 Release Notes
ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- MAGIC XPA最新版本Magic xpa 2.4c Release Notes
New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...
- Magic xpa 2.5发布 Magic xpa 2.5 Release Notes
Magic xpa 2.5發佈 Magic xpa 2.5 Release Notes Magic xpa 2.5 Release NotesNew Features, Feature Enhance ...
- Git for Windows v2.11.0 Release Notes
homepage faq contribute bugs questions Git for Windows v2.11.0 Release Notes Latest update: December ...
随机推荐
- Kafka中的zookeeper-shell.sh
连接 zookeeper bin/zookeeper-shell. 常用命令 connect host:port get path [watch] ls path [watch] set path d ...
- 快速选择算法/Select 寻找第k大的数
参考算法导论9.3节的内容和这位大神的博客:http://blog.csdn.net/v_JULY_v上对这一节内容代码的实现进行了学习 尝试实现了以查找中位数为前提的select算法. 算法功能:可 ...
- linux下mysql5.7以上my.cnf配置文件配置
简单配置,低配置服务器配置 [client] #客户端设置 port = 3306 socket = /data/mysql/data/mysql.sock default-character-set ...
- Servlet 监听器Listener详解
转自:http://blog.csdn.net/u012228718/article/details/41730799 一.简介 (一)概述 1.Listener 用于监听 Javaweb程序中的事件 ...
- [原创]C#中的堆和栈理解
引言:程序运行时,它的数据必须存在内存中,一个数据需要多大内存.存储在什么地方以及如何存储都依赖于该数据的数据类型. 1.什么是栈 栈是一个内存数组,是一个LIFO(Last-In-First-Out ...
- C# 数组 二维数组
数组:相同数据类型的元素按一定顺序排列的集合.是一组变量 作用:操作大量数据 数组的定义1.数组里面的内容必须是同一类型2.数据必须有长度限制 ...
- web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)
这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步 ...
- java通过url在线预览Word、excel、ppt、pdf、txt文档
java通过url在线预览Word.excel.ppt.pdf.txt文档中的内容[只获得其中的文字] 在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputS ...
- 畅通工程(hdu1863)并查集
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 漫画 | Spring AOP
上期,我们看到有小伙伴留言说希望讲讲AOP 然后...... 别激动,来得及 什么是AOP AOP是Spring 框架的一个关键组件,全称为Aspect-OrientedProgramming(面向切 ...