PHP中使用关键字的作用有哪些

  

PHP中使用关键字的作用有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>详细介绍

其实,现在流行PHP的框架,都是基于MVC模式的,大量的使用了命名空间,以提高程序的灵活性。那么框架是怎么实现将使用关键字所声明的类库对应的脚本文件进行加载的那?

(1):在通过<代码> 使用关键字进行声明类库的声明的时候,并不会进行脚本的加载,而是在脚本文件真正使用到所对应的类库的时候才会进行加载(这就是所谓延迟加载)。

(2):框架一般在初始化阶段,就声明了__ <代码>自动装载()函数或者是<代码> spl_autoload_register() 函数(一般会在入口文件中进行声明)。在调用通过用声明的类库的时候,会自动的调用上述的函数,将调用的类库名称传递到函数中(这里的类库名称是包括命名空间的全名称)

& lt; PHP ?   namespace 家庭\控制器;   function  __autoload (class_name美元),{,   ,//echo  class_name美元霸主地位;& lt; br/祝辞,,,   ,require_once  (“。/薄lass_name 美元;只“.php");,,   }   use 控制器管理\ \指数;   new 指数,//new 指数会触发__autoload()函数,返回控制器管理\ \指数到函数中   ?在

(3):框架中定义的__ <代码>自动装载()函数或者是<代码> spl_autoload_register() 函数在接收到传递过来的类库名称以后,框架会对名称进行处理,分析出类库名称所对应的文件路径,然后进行文件的加载。这里需要注意的是,不同的框架在解析类库名称,分析文件路径的方式是各不一致的,毕竟各自的目录结构是不一样的。

<强>比如说,thinkphp:

,/* *   *才能,类库自动加载   *,才能@param  string  class 美元;对象类名   *,才能@return 空白   ,*/,public  static  function 自动装载(类),{//,才能检查是否存在映射   如果才能(收取(self:: $ _map[$类])),{   ,,include 自我:_map美元(美元类);   }elseif才能(false  !==,大小写敏感(类,美元& # 39;\ \ & # 39;)){   name 美元,,,,,=,strstr(类,美元,& # 39;\ \ & # 39;,,真的);   ,,如果(in_array($名称、数组(& # 39;认为# 39;& # 39;org # 39;, & # 39;行为# 39;,& # 39;com # 39;, & # 39;供应商# 39;)),| |,is_dir (LIB_PATH。名字)美元){,   ,,,//,图书馆目录下面的命名空间自动定位   path 美元,,,,,=,LIB_PATH;   其他,,}{   ,,,//,检测自定义命名空间,否则就以模块为命名空间   ,,,namespace 美元;=,C (& # 39; AUTOLOAD_NAMESPACE& # 39;);   path 美元,,,,,=,收取(名称空间[名字]美元美元)?,目录名(名称空间[名字]美元美元)# 39;公司/& # 39;,:,APP_PATH;   ,,}   filename 美元,,,,=,path 美元;只str_replace(& # 39; \ \ & # 39;,, & # 39;/& # 39;,,美元类),只EXT;   ,,如果(is_file(文件名)美元),{   ,,,//,赢得环境下面严格区分大小写   ,,,if  (IS_WIN ,,, false ===,大小写敏感(str_replace (& # 39;/& # 39;,, & # 39; \ \ & # 39;,, realpath(文件名)美元),,class 美元;只EXT)) {   ,,,,return ;   ,,,}   ,,,include  $文件名;   ,,}   }才能elseif  (! C (& # 39; APP_USE_NAMESPACE& # 39;)), {//,,,自动加载的类库层   ,,foreach(爆炸(& # 39;& # 39;C (& # 39; APP_AUTOLOAD_LAYER& # 39;)), as 美元层){   ,,,如果(substr(类,美元strlen(层)美元)==$层){   ,,,,如果(require_cache (MODULE_PATH。层强生# 39;美元/& # 39;class.EXT美元)),{   ,,,,,return ;   ,,,,}   ,,,},,,   ,,}   ,,//,根据自动加载路径设置进行尝试搜索   ,,foreach (爆炸(& # 39;& # 39;C (& # 39; APP_AUTOLOAD_PATH& # 39;)), as 美元路径){   ,,,如果(导入(美元路径强生# 39;强生# 39;。美元类))   ,,,,//,如果加载类成功则返回   ,,,,return ;   ,,}   ,,}   以前,}

这里只是举例说明使用与文件的自动加载没有关系,不强调各个框架是具体怎么完成自动加载,具体的可以自己看框架代码进行研究。

PHP中使用关键字的作用有哪些