博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP类的自动加载
阅读量:2175 次
发布时间:2019-05-01

本文共 937 字,大约阅读时间需要 3 分钟。

__autoload

尝试加载未定义的类,PHP7.2弃用此函数。假定同一目录下有foo.php和test.php两个文件。

PHP5.3以前__autoload函数抛出的异常不能被catch语句块捕获并会导致一个致命错误。PHP5.3起能够thrown自定义的异常,随后自定义异常类即可使用。__autoload函数可以递归的自动加载自定义异常类。

//foo.php
"; }}class Bar{ function __construct(){ echo __CLASS__ ." in ". __FILE__ ."
"; }}interface ITest{ public function test();}?>
//test.php

要注意的是如果test.php中最后两行顺序颠倒的话会产生致命错误,因为Bar定义在foo.php中,无法通过__autoload加载。

spl_autoload_register

将函数注册到SPL的__autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。spl_autoload_register创建了一个autoload函数的队列,按定义时的顺序逐个执行。而__autoload函数只可以定义一次。如果程序中已经实现了__autoload函数,必须显式的将其注册到__autoload函数队列中。因为spl_autoload_register函数会将Zend Engine中的__autoload函数取代为spl_autoload或spl_autoload_call。

最多接受三个参数,第一个参数为要注册的自动装载函数,默认为spl_autoload();第二个参数为要注册的自动装载函数无法成功注册时,spl_autoload_register是否抛出异常,默认为true;第三个参数为PHP5.3新增的标识参数,表示要注册的自动装载函数是否添加到函数队列之首,默认为false。注册成功返回true,失败返回false。

PHP5.3起,还支持匿名函数和命名空间。

//test2.php
"; }}$t=new MyTest();$t->test();?>
//test3.php

 

转载地址:http://nykkb.baihongyu.com/

你可能感兴趣的文章
Centos7 离线安装RabbitMQ,并配置集群
查看>>
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>