php – 如何自动加载文件名与类名不同的类?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何自动加载文件名与类名不同的类?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2136字,纯文字阅读大概需要4分钟。
内容图文
我见过这些,
How to autoload class with a different filename? PHP
Load a class with a different name than the one passed to the autoloader as argument
我可以改变但是在我的MV *结构中我有:
/models
customer.class.php
order.class.php
/controllers
customer.controller.php
order.controller.php
/views
...
在它们的实际课程中,
class CustomerController {}
class OrderController{}
class CustomerModel{}
class OrderModel{}
我试图与这些名字保持一致.如果我没有把类名后缀(Controller,Model),我无法加载该类,因为这是重新声明的.
如果我保留我的类的名称,自动加载会失败,因为它将查找名为的类文件
CustomerController
当文件名确实是,
customer.controller.php
是我唯一的方式(无序):
>使用create_alias
>重命名我的文件(customer.model.php到customermodel.php)
>重命名我的课程
>使用正则表达式
>使用包含文件的引导程序(包括,
require_once等)
?
示例代码,
function model_autoloader($class) {
include MODEL_PATH . $class . '.model.php';
}
spl_autoload_register('model_autoloader');
好像我要重命名文件,
http://www.php-fig.org/psr/psr-4/
“终止类名对应于以.php结尾的文件名.文件名必须与终止类名的大小写相匹配.”
解决方法:
在我看来,这可以通过一些基本的字符串操作和一些约定来处理.
define('CLASS_PATH_ROOT', '/');
function splitCamelCase($str) {
return preg_split('/(?<=\\w)(?=[A-Z])/', $str);
}
function makeFileName($segments) {
if(count($segments) === 1) { // a "model"
return CLASS_PATH_ROOT . 'models/' . strtolower($segments[0]) . '.php';
}
// else get type/folder name from last segment
$type = strtolower(array_pop($segments));
if($type === 'controller') {
$folderName = 'controllers';
}
else {
$folderName = $type;
}
$fileName = strtolower(join($segments, '.'));
return CLASS_PATH_ROOT . $folderName . '/' . $fileName . '.' . $type . '.php';
}
$classNames = array('Customer', 'CustomerController');
foreach($classNames as $className) {
$parts = splitCamelCase($className);
$fileName = makeFileName($parts);
echo $className . ' -> '. $fileName . PHP_EOL;
}
输出是
Customer -> /models/customer.php
CustomerController -> /controllers/customer.controller.php
您现在需要在自动加载器功能中使用makeFileName.
我自己强烈反对这样的事情.我会使用反映命名空间和类名的命名空间和文件名.我也用Composer.
(我发现了splitCamelCase here.)
内容总结
以上是互联网集市为您收集整理的php – 如何自动加载文件名与类名不同的类?全部内容,希望文章能够帮你解决php – 如何自动加载文件名与类名不同的类?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。