php--每天积累01

一、include 、require

   定义:包含并运行指定文件

  问题:查询了这两个语言结构的资料,有人说,什么require  先执行,什么include后执行.

  思考:我觉得官方文档已经解释的很清楚了。这个两个参数的区别在于报错处理:

      include 遇到错误会警告,程序继续.

      require 遇到错误报错,程序结束.

  由此可见,引申出了 "先执行后执行" 的问题:

    假如,我在程序执行过程中需要加载一个文件,你说我用哪一个? -- 用 include , 程序执行过程中,有问题会报警但不会终止执行.

    所以,我在程序运行时加载文件,用include。相反,如果我在程序开始时就加载文件,可以考虑用require.

二、require_once  和 include_once :

  定义:相比于上面,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含.

        这个就更好理解了,对于一个文件可能被加载多次,建议使用_once.

三、看看YII源码中的使用实例:

0、require

 1 public function createController($route,$owner=null)
 2     {
 3             ......
42             if(is_file($classFile))
43             {
44                 if(!class_exists($className,false))
45                     require($classFile);//这里
46                 if(class_exists($className,false) && is_subclass_of($className,‘CController‘))
47                 {
48                     $id[0]=strtolower($id[0]);
49                     return array(
50                         new $className($controllerID.$id,$owner===$this?null:$owner),
51                         $this->parseActionParams($route),
52                     );
53                 }
54                 return null;
55             }
56             $controllerID.=$id;
57             $basePath.=DIRECTORY_SEPARATOR.$id;
58         }
59     }

这里使用了require,但是上下文中包含是否含有此文件判断,这个地方牵扯到创建controller,如此关键的步骤,需要让它有问题报错提示。

1、require_once

1 <?php
2
3 // change the following paths if necessary
4 $yii=dirname(__FILE__).‘/../../framework/yii.php‘;
5 $config=dirname(__FILE__).‘/protected/config/main.php‘;
6 // remove the following line when in production mode
7 // defined(‘YII_DEBUG‘) or define(‘YII_DEBUG‘,true);
8 require_once($yii);
9 Yii::createWebApplication($config)->run();

这是某个apps下的入口文件,入口文件,会多次执行,所以只要验证加载了就不在加载。

2、include

 1     public static function autoload($className,$classMapOnly=false)
 2     {
 3         // use include so that the error PHP file may appear
 4         if(isset(self::$classMap[$className])) {
 5
 6             include(self::$classMap[$className]);
 7         }
 8         elseif(isset(self::$_coreClasses[$className]))
 9             include(YII_PATH.self::$_coreClasses[$className]);
10         elseif($classMapOnly)
11             return false;
12         else
13         {
14             // include class file relying on include_path
15         .....
1 private static $_coreClasses=array(
2         ‘CApplication‘ => ‘/base/CApplication.php‘,
3         ‘CApplicationComponent‘ => ‘/base/CApplicationComponent.php‘,
4         ‘CBehavior‘ => ‘/base/CBehavior.php‘,
5         ‘CComponent‘ => ‘/base/CComponent.php‘,
6
7         ‘CCache‘ => ‘/caching/CCache.php‘,

截取一部分,这个autoload方法,根据参数classname作为key,从注册的_coreClasses提取value。

这里使用的是include,因为是在程序执行期间动态加载文件,所以使用了include.我想原因可能是加載的文件很多,不能保证所有文件不会变化,所以用到加载一遍,保证最新。

3、include_once

 1 function highlight($str)
 2     {
 3         if (!($this->_renderer)) {
 4             include_once(dirname(__FILE__).‘/Renderer/Html.php‘);
 5             $this->_renderer = new Text_Highlighter_Renderer_Html($this->_options);
 6         }
 7         $this->_state = -1;
 8         $this->_pos = 0;
 9         $this->_stack = array();
10         $this->_tokenStack = array();
11         $this->_lastinner = $this->_defClass;
12         $this->_lastdelim = $this->_defClass;
13         $this->_endpattern = ‘‘;
14         $this->_renderer->reset();
15         $this->_renderer->setCurrentLanguage($this->_language);
16         $this->_str = $this->_renderer->preprocess($str);
17         $this->_len = strlen($this->_str);
18         while ($token = $this->_getToken()) {
19             $this->_renderer->acceptToken($token[0], $token[1]);
20         }
21         $this->_renderer->finalize();
22         return $this->_renderer->getOutput();
23     }

这个高亮处理函数,就是采用了_once加载,目的也是运行中加载,并且只加载一次。

四、YII处理思路--动态加载

  1、指定方法,注册到__autoload.

  2、将可能用到的文件,以key-value形式存储为静态变量.

  3、根据key(类名),对应出文件路径,使用 include 运行中加载.  

总结:我觉得,决定怎样么用,需要结合项目,根据实际需要进行调用此语法结构。--以上如有错误请指出,我会及时更正,转php的道路上...
时间: 2024-10-27 05:24:30

php--每天积累01的相关文章

英语美句-每日积累-01

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 18.0px "Yuanti SC" } span.s1 { } span.s2 { color: #0433ff } 1. Every parting from you is like a little eternity.//永恒 每一次和你分别都有些像是永别. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-

经典语录-每日积累-01

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000 } 本无意与众不同,怎奈品位出众                                           --题记 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000 } span.s1

我喜欢减肥我们来减肥吧

http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313278016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313282016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313289016/2015.01.28.html http://www.ebay.com/cln/usli

百度回家看沙发沙发是减肥了卡斯加积分卡拉是减肥

http://www.ebay.com/cln/hpryu-caw8ke/cars/158056866019/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445650015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445674015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/1584456790

巢哑偕倥乇椭煞谙暗逞帕俸

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

我国第三代移动通信研究开发进展-尤肖虎200106

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线

pl/sql学习1——标量变量psahnh6S

为类型.不能用于表列的数据类型.范围为的子类型.自然数.为的子类型.具有约束为单精度浮点数.为变量赋值时.后面要加为双精度浮点数.为变量赋值时.后面要加.为数字总位数.为小数位数是的子类型.最大精度位是的子类型.最大精度位单精度浮点型是的子类型.最大精度位双精度浮点型定义精度为位的实数..定义为位的整数.变长字符串.最长测试变量数据!.定长字符串.最长测试变长二进制字符串物理存储的为类型...固定长度.个字节使用定义数据类型那个最小值:最大值:最小值:最大值:最小值:最大值:最小值:最大值:最小

SolidWorks知识积累系列-01

Solidworks学习 1. 基本知识点总结 基准视图 主视图:从前往后看,前视基准 俯视图:从上往下看,上视基准 侧视图:从右向左看,右视基准 草图要求 单封闭性,草图要依附于某个位置 绘制大概形状 确定几何关系.位置关系.定位尺寸 标注草图形状尺寸 快捷键 缩放:中键滚动 平移:Ctrl + 中键 旋转:不放中键移动鼠标 方向:空格键 终止命令方式 ESC 单击对号 右键单击“选择” 一些好的命令 转换实体应用 可以直接将几何体元素快速转化为草图. 草图的路径长度尺寸 基准面的选择 创建基

Shell编程积累 zhuan

在新的shell里执行程序 cd /home/lq/Server/anew-lstm_scriptmatlab -nodesktop -singleCompThred -r 'aStart' ,quit & SLAVE_PID=$!;#echo "sh ./slaveRun.sh localhost 10000 localhost localhost" | xfce4-terminalsleep 3xfce4-terminal -x sh ./slaveRun.sh local