php面向对象学习积累(二)

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.《设计模式——可复用面向对象软件的基础》

猜你喜欢

转载自blog.csdn.net/xiaoxinshuaiga/article/details/81566446
今日推荐