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 ...
随机推荐
- Mac OS X 下搭建thrift环境
1.概述 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生产引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, ...
- JAVA NIO:Buffer.mark()的用法
在默认情况下,Buffer.mark()并没有什么用处,既不会影响Buffer的遍历,也不会影响Buffer的位置统计函数,如remaining()函数,能影响这些操作的行为只有position(). ...
- maven install 打包 报错 Cannot run program "gpg.exe": CreateProcess error
打包报错, mvn install后加上参数-Dgpg.skip,例如:mvn install -Dgpg.skip 即可解决. 我们也可以去掉 这个 插件 <plugin> ...
- 局域网的路由器&网卡
网卡 唯一的标志 MAC地址:14:21:S8:8B:44:89 昵称:TP-Link-4489 如何获取局域网IP? DHCP(动态主机配置协议) DHCP 服务器可以动态的分配地址. 1)网卡(T ...
- window对象方法之setTimeout(),setInterval()
window中的这两个方法是比较重要的,在许多的设计中会使用到这两个方法.比如使用在倒计时抢购中. 首先来说说这两个方法的用法吧! 一:window.setTimeout(); setTimeout( ...
- Rectangles(第七届ACM省赛原题+最长上升子序列)
题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1255 描述 Given N (4 <= N <= 100) rec ...
- Quart2D矩阵变换
如果想让它可以有前面介绍的那种反射变化的效果,在绘图中也是可以的. 一.首先看一下未加任何矩阵变换时的图像 CGContextRef context=UIGraphicsGetCurrentConte ...
- .5-浅析express源码之Router模块(1)-默认中间件
模块application已经完结,开始讲Router路由部分. 切入口仍然在application模块中,方法就是那个随处可见的lazyrouter. 基本上除了初始化init方法,其余的app.u ...
- 关于.net程序集引用不匹配的问题
今天启动asp.net mvc 程序,其中也用到了web api ,autofac等,为了版本兼容性问题,将mvc和 web api 的版本控制到5.2.0.0,Newtonsoft.Json 的版本 ...
- Redis-其他命令
1.排序 SORT : SORT sourcekey [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [A ...