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 ...
随机推荐
- JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二
要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...
- vmrun 批量创建vmware虚拟机
1 准备模板机 具体步骤如下: 1. 下载镜像安装系统 https://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/ 2. 安装完成配置好IP ,关闭 ...
- 微信emoji的code
const MAP = [ "\xc2\xa9" => 'COPYRIGHT SIGN', "\xc2\xae" => ...
- postman参数化 接口响应数据获取符合条件的内容参数化给后面的接口使用
一:主要内容 从响应结果中找到满足条件的key,获取其value,参数化给后面的接口使用 二:参数化获取想要的value值,传给后面的接口使用 有时我们获取的响应数据,需要的那个字段可能在一个数组里面 ...
- 【LeetCode题解】24_两两交换链表中的节点(Swap-Nodes-in-Pairs)
目录 描述 解法一:迭代 思路 Java 实现 Python 实现 复杂度分析 解法二:递归(不满足空间复杂度要求) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解 ...
- PHP面向对象——类
<?php/** * Created by PhpStorm. * User: 63448 * Date: 2018/5/6 * Time: 9:44 *///类:相似的数据和数据操作的封装 c ...
- Spring基础(4) : bean重写
@Configuration public class Config1 { @Bean() public Person getP(){ Person p = new Person(); p.setNa ...
- golang中的接口实现(二)
指针类型 vs 值类型实现接口 package main import ( "fmt" ) // 定义接口 type Describer interface { Describe( ...
- JSON跨域解决方案收集
最近面试问的挺多的一个问题,就是JavaScript的跨域问题.在这里,对跨域的一些方法做个总结.由于浏览器的同源策略,不同域名.不同端口.不同协议都会构成跨域:但在实际的业务中,很多场景需要进行跨域 ...
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
WEB层: // 获取分页的请求参数 String start = request.getParameter("start"); String page = request.get ...