1.include()和require()语句的不同在于它们如何处理错误。使用require()调用文件发生错误时,将会停止整个程序;调用include()时遇到相同的错误,则会生成警告并停止执行包含文件,跳出调用代码然后继续执行。require()和require_once()用于包含库文件时更加安全,而include()和include_once()则适用于加载模板这样的操作。
2.注意命名空间和自动加载
3.php中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵活,而且可以提供更多信息。反射API也可与PHP最新的面向对象特性一起工作,如访问控制、接口和抽象类。旧的类函数则不太容易与这些新特性一起使用。看过框架源码的朋友应该对PHP的反射机制有一定的了解,像是依赖注入,对象池,类加载,一些设计模式等等,都用到了反射机制。
4.面向对象和面向过程
<?php
//面向过程写法
function readParams($sourceFile)
{
$params = array();
//从$sourceFile中读取文本参数
return $params;
}
function writeParams($params, $sourceFile)
{
//写入文本参数到$sourceFile
}
$file = "./param.txt";
$array['key1'] = "val1";
$array['key2'] = "val2";
$array['key3'] = "val3";
writeParams($array, $file);//将数组写到文件
$output = readParams($file);//从文件读取数组
print_r($output);
/*
* 这些代码较为紧凑并且易于维护。现在,我们被告知这个工具需要支持如下所示的XMl格式
* 如果参数文件以.xml结尾,就应该以XML模式读取参数文件。虽然这并不难调节,但可能会
* 使我们的代码更难维护。
*/
function readParams($source){
$params=array();
if(preg_match("/\.xml$/i",$source)){
//从$source中读取XML参数
}else{
//从$source中读取文本参数
}
return $params;
}
function writeParams($params,$source){
if(preg_match("/\.xml$/i",$source)){
//写入XML参数到$source
}else{
//写入文本参数到$source
}
}
abstract class ParamHandler{
protected $source;
protected $params=array();
function __construct($source)
{
$this->source=$source;
}
function addParam($key,$val){
$this->params[$key]=$val;
}
function getAllParams(){
return $this->params;
}
static function getInstance($filename){
if(preg_match("/\.xml$/i",$filename)){
return new XmlParamHandler($filename);
}
return new TextParamHandler($filename);
}
abstract function write();
abstract function read();
}
class XmlParamHandler extends ParamHandler{
function write(){
//写入XML文件
//使用$this->>params
}
function read(){
//读取XML文件内容
//并赋值给$this->params
}
}
class TextParamHandler extends ParamHandler{
function write(){
//写入文本文件
//使用$this->params
}
function read(){
//读取文本文件内容
//并赋值给$this->params
}
}
$test=ParamHandler::getInstance("./params.xml");
$test->addParam("key1","val1");
$test->addParam("key2","val2");
$test->addParam("key3","val3");
$test->write();//写入XML格式中
//还可以从另一种文件格式中读取
$test=ParamHandler::getInstance("./params.txt");
$test->read();//从文本格式中读取
5.四个方向标(代码重复,类知道的太多,万能的类,条件语句)
6.学会使用uml(类图,时序图)
7.《设计模式——可复用面向对象软件的基础》