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]写的很清晰,推荐。

17. 依赖注入 [ref  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

ref

<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]

28. yii framework [ref   ref2]

admin intro: [ref3]

php notes的更多相关文章

  1. 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 ...

  2. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  3. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  6. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  7. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  8. MAGIC XPA最新版本Magic xpa 2.4c Release Notes

    New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...

  9. 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 ...

  10. Git for Windows v2.11.0 Release Notes

    homepage faq contribute bugs questions Git for Windows v2.11.0 Release Notes Latest update: December ...

随机推荐

  1. 轻量级web富文本框——wangEditor使用手册(5)——配置“插入代码”功能

    最新版wangEditor: demo.文档:http://www.wangEditor.github.io/ 下载地址:https://github.com/wangfupeng1988/wangE ...

  2. JAVA进阶之路(一)

    初学的大三奋斗者,fighting!!! 下面是进阶之路 Java平台和语言最开始只是SUN公司在1990年12月开始研究的一个内部项目.SUN公司的一个叫做帕特里克·诺顿的工程师被自己开发的C和C语 ...

  3. Linux 一次杀死多进程

    .- | 说明: “grep firefox”的输出结果是,所有含有关键字“firefox”的进程. “grep -v grep”是在列出的进程中去除含有关键字“grep”的进程. “-”是截取输入行 ...

  4. 制作openstack使用的Ubuntu镜像

    一.环境准备 OS:Ubuntu-14.04 制作镜像版本:Ubuntu-14.04.4-server-amd64.iso 查看是否支持虚拟化(有输出代表支持,否则在BIOS页面中设置即可): egr ...

  5. SOA和微服务架构的区别?

    转自知乎:https://www.zhihu.com/question/37808426/answer/93335393 SOA和微服务架构的区别? 微服务架构强调的第一个重点就是业务系统需要彻底的组 ...

  6. 南方IT教材反馈

    为了进一步提升教材质量,大家可以在底部留言区反馈您发现的任何问题或建议,谢谢!           最终我们将从所有读者中找出幸运读者发放奖品! 好教材也有我的一份功劳!

  7. smtp的host地址

    SMTP是SIMPLE MAIL TRANSFER PROTOCOL的缩写,一般的发信软件,如Outlook Express.FoxMail.Eudora都是使用这个协议进行发信的.SMTP Host ...

  8. 使用authentication进行身份验证,与Forms表单登陆

    做到登录时,不像在用自己的逻辑去判断用户是否登陆,就上网搜查,得知还有此方法,这个方法用起来很简单实用,第一次使用,还有很多不理解的地方,记下来方便以后查阅更改. 使用这个方法当然需要了解里面的属性和 ...

  9. <tbody>标签的用途

    如果一个表格是 分 好几个部分 ,那么每个部分 使用一组<tbody>这样,下载完第一个部分 就可以先显示了,不用等后面的部分是否下载好,这是写给浏览器看的.

  10. Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了

    目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...