在 PHP5 以后的版本中可以定义一个 __autoload() 函数,当调用一个未定义的类的时候就会启动此函数,从而在抛出错误之前做最后的补救,不过这个函数的本意已经被完全曲解使用了,现在都用来做自动加载。后来这个函数实际上已经不被推荐使用了,相反,现在应当使用 spl_autoload_register() 来注册类的自动加载函数。前面我们介绍了php命名空间的基本知识,使用方法,作用等等,这一节就重点来说说php命名空间自动加载。
spl_autoload_register() 的语法格式如下:
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
autoload_function 是需要注册的自动装载函数,如果此项为空,则会注册 spl_autoload 函数,
throw 此参数设置了 autoload_function 无法成功注册时, spl_autoload_register() 是否抛出异常。
prepend 如果是 true, spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
上面提到了 spl_autoload 函数,实际上注册函数的规范就应当遵循此函数,函数声明如下:
void spl_autoload ( string $class_name [, string $file_extensions ] )
由于这个函数默认实现是通过 C 语言,所以这里给出一个 PHP 语言的实现规范。
其实例代码如下:
<?php // 自定义类 define('CLASS_DIR', 'class/'); // 添加类的路径 set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR); // 使用自动加载添加类 spl_autoload_extensions('.class.php'); // 默认加载 spl_autoload_register(); ?>
大致上就和这个是类似的。实际上命名空间和自动加载类的结合就基本是通过路径形式。
使用composer的autoload来自动加载
composer的出现真是让人们眼前一亮,web开发从此变成了一件很“好玩”的事情,开发一个CMS就像在搭积木,从packagist中取出“ 积木 ”搭建在自己的代码中,一点一点搭建出一个属于自己的王国。
使用composer基本就可以抛弃了require和include函数,一个项目中,这两个函数只可能出现一次,那就是 require '../vendor/autoload.php'。
然后就可以非常方便的去使用第三方的类库了,是不是感觉很棒啊!对于我们需要的monolog,就可以这样用了:
use Monolog\Logger; use Monolog\Handler\StreamHandler; // 创建日志 $log = new Logger('name'); $log->pushHandler(new StreamHandler('/path/to/log/log_name.log', Logger::WARNING)); // 将记录添加到日志 $log->addWarning('Foo'); $log->addError('Bar');
在这个过程中,Composer做了什么呢?它生成了一个autoloader,再根据各个包自己的autoload配置,从而帮我们进行自动加载的工作。
实现方式的步骤:
1. 先安装composer,可以参照php依赖管理工具composer入门教程
2. 在项目根目录创建composer.json文件,写入代码
{ "type": "project", "autoload": { "psr-4": { "Admin\\": "admin/" } } }
3. 在项目根目录打开命令,写入命令
composer update
4.等待执行完成。安装成功后,会在项目根目录下新建一个"/vendor/"文件夹。
说明:使用之前需要require一下"/vendor/autoload.php"文件。
$autoLoadFilePath = dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php'; require_once $autoLoadFilePath;
5. 在"/admin/"目录下新建test.php文件,文件内容如下
<?php namespace Admin; class test { public function sayHi() { echo 'hi'; } } ?>
在"/public/"目录下新建index.php文件,文件内容如下
sayHi(); ?>
6. 配置apache,访问路径,得到如下的结果就表示成功。
【相关教程推荐】
2. 视频教程:命名空间:我们虽然同名同性,但却属于不同时空
以上是php命名空间自动加载:如何使用composer的autoload来实现自动加载的详细内容。更多信息请关注PHP中文网其他相关文章!

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Dreamweaver CS6
视觉化网页开发工具

Atom编辑器mac版下载
最流行的的开源编辑器