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. Disrunptor多生产者多消费者模型讲解

    多生产者多消费者模拟需求:1.创建100个订单生产者,每个生产者生产100条订单,总共会生产10000条订单,由3个消费者进行订单消费处理.2.100个订单生产者全部创建完毕,再一起生产消费订单数据 ...

  2. 和我一起打造个简单搜索之ElasticSearch集群搭建

    我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...

  3. WPF中路由事件的传播

    路由事件(RoutedEvent)是WPF中新增的事件,使用起来与传统的事件差别不大, 但传播方式是完全不同的. 路由事件的传播方式 通过RoutingStrategy来定义传播的方式 public ...

  4. IC 设计中DFT的Boundary Scan功能

    在很大规模的IC设计中,往往会有一些各种各样的bug出现,不论是在前期design的过程,还是在post silicon流片回来chip的flaw,都会导致chip的功能的失败,时钟频率无法达到期望频 ...

  5. C# 例子1

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. SOA,Webservice,SOAP,REST,RPC,RMI的区别与联系

    SOA,Webservice,SOAP,REST,RPC,RMI的区别与联系 SOA面向服务的软件架构(Service Oriented Architecture) 是一种计算机软件的设计模式,主要应 ...

  7. HTTPS加密越来越流行,为何要加密?

    继谷歌之后,国内最大的搜索引擎百度在2015年5月实现了全站HTTPS加密.搜狗搜索.360搜索.bing搜索.淘宝.天猫.知乎等也都实现了全站HTTPS加密,互联网即将迎来全网HTTPS加密时代. ...

  8. [转]Magento Configurable Product

    本文转自:https://docs.magento.com/m1/ce/user_guide/catalog/product-configurable.html A configurable prod ...

  9. MVC母版页_Layout.cshtml

    记得在asp.net时候,我们常会使用母版页MasterPage.而在MVC也有此功能,应用起来比MasterPage更加便捷. 在本次练习之前,所有MVC的练习均是创建单独的网页.Insus.NET ...

  10. C#网络爬虫--多线程处理强化版

    上次做了一个帮公司妹子做了爬虫,不是很精致,这次公司项目里要用到,于是有做了一番修改,功能添加了网址图片采集,下载,线程处理界面网址图片下载等. 说说思路:首相获取初始网址的所有内容 在初始网址采集图 ...