zoukankan      html  css  js  c++  java
  • php框架编写思路要点

    一、单入口文件,一般为index.php, 一般做3件事:

      1》在这个文件里一般不提供任何处理代码,只是可以预定义一些配置中的变量,覆盖框架中的配置

      2》加载框架,创建应用

      3》运行应用

    二、加载框架的文件,要干的事:

     1》定义开始时间常量 及 内存初始使用情况:YII_BEGIN_TIME  MEMORY_LIMIT_ON

     2》定义调试状态:YII_DEBUG

     3》定义调试时显示的错误跟踪栈:YII_TRACE_LEVEL

     4》定义是否能处理异常和错误:YII_ENABLE_EXCEPTION_HANDLER   YII_ENABLE_ERROR_HANDLER

     5》定义框架路径:YII_PATH

     6》定义其他一些用到的常量

     ----------------------------------------

     7》定义生成应用的类,在这个类中要干的事:

         1:定义存储预加载的类映射$classMap = array(‘类名' => '类路径')

         2:定义应用中用到的一些共有方法,如日志处理,性能分析,注册自动加载机制

    三、框架目录机构规划

      1》框架入口文件,如iWeb.php,提供创建应用,注册自动加载机制等

        2》各功能模块单独存放在目录里:一般包括数据库处理DB,缓存处理Cache,语言处理Lang,日志处理Log, 国际化处理util,处理网站应用的Web(包括action,controller,model,view

    四、对于一些重要的配置参数,在应用CApplication类中应该提供对其调用的接口函数

    注意:虽然通过config.php可以直接通过键名获取,但是这样的话无法确保是否配置正确,单独写函数可以判断是否写的正确)如Yii中的CApplication设置 (private $_basePath;) 这个属性的方法(虽然在config配置中'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..')已经配置过了,但是提供接口可以确保是个有效的地址。

    /**
     * Returns the root path of the application.
     * @return string the root directory of the application. Defaults to 'protected'.
     */
    public function getBasePath()
    {
        return $this->_basePath;
    }
    
    /**
     * Sets the root directory of the application.
     * This method can only be invoked at the begin of the constructor.
     * @param string $path the root directory of the application.
     * @throws CException if the directory does not exist.
     */
    public function setBasePath($path)
    {
    //如果文件存在且是一个路径 if(($this->_basePath=realpath($path))===false || !is_dir($this->_basePath)) throw new CException(Yii::t('yii','Application base path "{path}" is not a valid directory.', array('{path}'=>$path))); }

    三、使用一个常量或路径别名来代替长的路径配置

    Yii中运用的:
    Yii::setPathOfAlias('application',$this->getBasePath());
    Yii::setPathOfAlias('webroot',dirname($_SERVER['SCRIPT_FILENAME']));
    Yii::setPathOfAlias('ext',$this->getBasePath().DIRECTORY_SEPARATOR.'extensions');

    phpcms中运用的:
    //PHPCMS框架路径
    define('PC_PATH',dirname(__FILE__).DIRECTORY_SEPARATOR);
    if(!defined('PHPCMS_PATH'))define('PHPCMS_PATH', PC_PATH.'..'.DIRECTORY_SEPARATOR);
    //缓存文件夹地址
    define('CACHE_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR);
    //主机协议
    define('SITE_PROTOCOL',isset($_SERVER['SERVER_PORT']) &&$_SERVER['SERVER_PORT'] =='443' ? 'https://':'http://');
    //当前访问的主机名
    define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] :''));
    //来源
    define('HTTP_REFERER',isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] :'') 

    四、处理前添加钩子处理


    来自Yii中CApplication中的都__construct方法

    $this
    ->preinit(); //处理请求前添加钩子,预处理
    
    
    $this->initSystemHandlers();   //预初始化一些事,如错误处理,exception处理
    $this->registerCoreComponents();
    $this->configure($config);
    $this->attachBehaviors($this->behaviors);
    $this->preloadComponents();
    
    
    $this->init();  //处理请求后添加初始化方法


    /**
     * Initializes the class autoloader and error handlers.
     */
    protected function initSystemHandlers()
    {
        if(YII_ENABLE_EXCEPTION_HANDLER)
            set_exception_handler(array($this,'handleException'));
        if(YII_ENABLE_ERROR_HANDLER)
            set_error_handler(array($this,'handleError'),error_reporting());
    }

  • 相关阅读:
    js/Jquery table 内部控件计算和tr的生成
    反射 实体类的赋值/取值问题
    C#读取Excel 几种方法的体会
    水晶报表升级遇到的问题
    使用异或位运算符实现交换两个整数详解
    美国宇航局两万兆数据存储方案下载
    Flash全屏(转载)
    Unity3D实现动态加载游戏资源
    C#,ASP.NET jquery uploadify上传控件中文乱码解决办法
    HTML通过button触发inputfile控件上传文件的问题
  • 原文地址:https://www.cnblogs.com/Alight/p/3110442.html
Copyright © 2011-2022 走看看