php类的自动加载
‘壹’ 我想尝试着写个小型php框架,现在卡在类自动加载和路由实现上了
类自动加载跟路由是框架最基础的特性
给你点自动加载的思路,首先现在写框架必须用上命名空间,框架内部的类文件夹根据命名空间命名方便自动加载
在入口文件引入自己写的Autoload.php 通过spl_autoload_register获得要加载的类名
spl_autoload_register(function($class_name){
Autoload::splAutoload($class_name);
});
asseek outeRouter
asseekFunc
asseek
outeRoute
appwwwdocsdocsController
asseekController
asseekView
如果你采用命名空间上面函数的$class_name是类似这样的字符串,只要你有当前项目的初始路径再根据这段字符串require相应的php文件应该不难,自动加载就搞定了。
路由就更简单了就是通过$_SERVER['REDIRECT_URL'] 或$_SERVER['REDIRECT_URI'] 获得用户访问的URL,根据自己的框架制定的规则从URL中取得控制器与控制器方法名称,判断controller的类是否存在,存在则实例化,再判断controller的method是否存在,存在则调用方法,方法里面加载视图等就是另外的事情了。
‘贰’ php绫昏嚜锷ㄥ姞杞
姝e父锛屼綘镄勭被钖嶅凡缁忓己鍒惰浆鎹㈡垚灏忓啓镄勪简锛岃屼綘镄勭被钖嶆槸澶у皬鍐欐贩钖堢殑锛佸傛灉寮钖浜嗘枃浠跺悕澶у皬鍐欐娴嬶纴镶瀹氩氨镓句笉鍒颁简锛
‘叁’ PHP怎么自动加载同一目录下同一命名空间的类文件
自动加载的,只有在实例化时才会真的载入。实例化时,调用公共空间的方式是直接在元素名称前加
\
就可以了,否则PHP解析器会认为我想调用当前空间下的元素。
‘肆’ php,thinkphp自动加载怎么实现的呢
php 中有个魔术方法__autoload ,这个函数在找不到类的时候就会调用,自动加载就是在这里实现的。通过指定自动加载类的路径,只要保证文件名和类名一样。就可以自动加载。这也是为什么你看很多源码中类的名字和文件名一样的原因,这样可以实现自动加载,不需要include.