PHP中一些重要的函数总结
来源:互联网 发布:喷绘设计用什么软件 编辑:程序博客网 时间:2024/04/25 15:25
_autoload、spl_autoload_register、register_shutdown_function、set_error_handler、set_exception_handler
在php开发之中,经常使用一些框架,往往会令我们对php一些比较重要的函数慢慢地有些陌生,趁有空之际,好好总结一番,便于以后查看
1._autload函数
当php调用一个找不到类的时候就会自动调用__autoload函数
eg:
function __autoload( $class ) { $file = $class . '.class.php'; if ( is_file($file) ) { require_once($file); }else{ die('调用一个未定义的类'); }}$stu=new Student();var_dump($stu);
执行结果如下
解析:脚步在student对象时候,并没有引进Student类,php引擎就会调用_autoLoad函数来试图找到Student类,并将该类名作为参数传递给_autoload函数
2.spl_autoload_register
spl_autoload_register(),这个函数与__autoload有与曲同工之妙。都是当调用一个找不到的类的时候自动调用。
eg:
<?phpfunction loadprint( $class ) { $file = $class . '.class.php'; if (is_file($file)) { require_once($file); } } class Loader { public static function loadprint( $class ) { $file = $class . '.class.php'; if (is_file($file)) { require_once($file); } }} spl_autoload_register( 'loadprint' );//spl_autoload_register( array('test','loadprint') );//另一种写法:spl_autoload_register( "test::loadprint" );
但是spl_autoload_register()和__autoload还是有一定区别的
手册是这么说的
bool spl_autoload_register ([ callback $autoload_function ] )将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或spl_autoload_call()。
个人理解:_autoload 已经不被推荐使用了,推荐使用 spl_autoload_register 来注册加载器。spl_autoload_register 相关的有一组函数可以更灵活地控制自动加载的具体行为。__autoload 只能存在一个,如果项目中使用的两个库都有 __autoload 就会出现冲突而无法运行,spl_autoload_register 则没有这个问题,多次使用 spl_autoload_register, 它会按顺序逐个调用加载器。如果已经使用了 spl_autoload_register, 那么 __autoload 会被忽略,除非你手动重新注册它
3.register_shutdown_function
也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用register_shutdown_function
所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function 是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时,代码执行存在异常和错误、警告
4.set_error_handler
PHP遇到错误时,就会给出出错脚本的位置、行数和原因 ,有些网管干脆把PHP配置文件中的display_errors设置为Off来解决(貌似我们就是这样做的),但本人认为这个方法过于消极。
- 可以用来屏蔽错误。 出现错误一来会把一些信息暴漏给用户,极有可能成为黑客攻击你网站的工具。 二来让用户觉得你的水平很挫。
- 可以记下错误的信息, 及时发现一些生产环境的出现的问题。
- 可以做相应的处理, 出错的时候可以显示跳转到预先定义好的出错页面,提供更好的用户体验。
- 可以作为调试工具, 一些时候必须在生产环境调试一些东西, 但又不想影响正在使用的用户。
语法
set_error_handler(error_function,error_types)
使用set_error_handler()后,error_reporting ()将会失效,因为如果使用了该函数,会完全绕过标准的 PHP 错误处理函数,如果必要,用户定义的错误处理程序必须终止 (die() ) 脚本。
自定义的错误处理函数一定要有这4个输入变量$errno(错误类型),$errstr(错误信息),$errfile(错误文件),$errline(错误行数),否则无效
1. * E_ERROR、 E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被这个句柄处理的,也就是会用最原始的方式显示出来。不过出现这些错误都是编译或PHP内核出错,在通常情况下不会发生。
2.* 使用set_error_handler()后,error_reporting ()将会失效。也就是所有的错误(除上述的错误)都会交给自定义的函数处理。
<?phpfunction errorHandle($errno, $errstr, $errfile, $errline) { var_dump($errno.'_'.$errstr.'_'.$errfile.'_'.$errline); die(); }//set error handlerset_error_handler("errorHandle");$test=2;var_dump($test/0);
5.set_exception_handler
set_exception_handler() 函数设置用户自定义的异常处理函数。
该函数用于创建运行时期间的用户自己的异常处理方法。
该函数会返回旧的异常处理程序,若失败,则返回 null。
- PHP中一些重要的函数总结
- matlab实战中一些重要的函数总结
- PHP中绘制图像的一些函数总结
- php 数组中遇到的一些函数总结
- 驱动中一些重要函数
- tensorflow中一些重要函数
- 重要的函数总结。
- Android中关于外部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- 【File】Android中关于内部存储的一些重要函数
- 【File】Android中关于外部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android中关于外部存储的一些重要函数
- 选择排序
- getApplicationContext()与Activity.this区别
- hdu2021——发工资咯:)
- 蓝牙二
- Softmax vs. Softmax-Loss: Numerical Stability
- PHP中一些重要的函数总结
- SAP系统设计的思考---开发环境
- windows下GPG的使用
- 2016,开启我的博客生涯
- 【leetcode】【21】Merge Two Sorted Lists
- android 异常处理--java.io.IOException: 您的主机中的软件中止了一个已建立的连接
- 在WORD 2007中给公式编号
- bzoj 3505 (排列组合)
- Gears of Programmer--工作