深入理解PHP类的自动载入机制_php实例

php的自动加载:

在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦

php作者想简单点,最好能引用一个类时,如果当前没有include进来,系统能自动去找到该类,自动引进~

于是:__autoload()函数应运而生。

通常放在应用程序入口类里面,比如discuz中,放在class_core.php中。

先讲浅显的例子:

第一种情况:文件A.php中内容如下

<?php

class A{

  public function __construct(){

      echo 'fff';

  }

}

?>

文件C.php 中内容如下:

<?php
function __autoload($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
$a = new A(); //这边会自动调用__autoload,引入A.php文件

?>

第二种情况:有时我希望能自定义autoload,并且希望起一个更酷的名字loader,则C.php改为如下:

<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}

spl_autoload_register('loader'); //注册一个自动加载方法,覆盖原有的__autoload

$a = new A();

?>

第三种情况:我希望高大上一点,用一个类来管理自动加载

<?php
class Loader
{
public static function loadClass($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
}  

spl_autoload_register(array('Loader', 'loadClass'));  

$a = new A();

?>

当前为最佳形式。

通常我们将spl_autoload_register(*)放在入口脚本,即一开始就引用进来。比如下面discuz的做法。

if(function_exist('spl_autoload_register')){

  spl_autoload_register(array('core','autoload')); //如果是php5以上,存在注册函数,则注册自己写的core类中的autoload为自动加载函数

}else{

  function __autoload($class){     //如果不是,则重写php原生函数__autoload函数,让其调用自己的core中函数。

    return core::autoload($class);

  }

}

这段扔在入口文件最前面,自然是极好的~

以上这篇深入理解PHP类的自动载入机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php自动载入
深入了解php底层机制、java反射机制深入、深入理解计算机系统、深入理解java虚拟机、深入理解linux内核,以便于您获取更多的相关知识。

时间: 2024-08-30 22:22:26

深入理解PHP类的自动载入机制_php实例的相关文章

深入理解PHP类的自动载入机制

php的自动加载: 在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 php作者想简单点,最好能引用一个类时,如果当前没有include进来,系统能自动去找到该类,自动引进~ 于是:__autoload()函数应运而生. 通常放在应用程序入口类里面,比如discuz中,放在class_core.php中. 先讲浅显的例子: 第一种情况:文件A.php中内容如下 <?php class A{ public

简单的php缓存类分享 php缓存机制_php实例

复制代码 代码如下: <?phpclass Cache { private $dir = "data/cache/";//定义缓存目录  private $key='c_a_sss'; // 文件名md5加密密钥  function set_dir($dirpath) {  $this->dir=$dirpath;  $this->make_dir($this->dir); } function read($key,$minutes=1) {  $filenam

PHP类的自动载入程序代码

加入我们现在有两个PHP文件,内容如下: Test1.php <?php class Test1 {     public function func1() {         return 'test1';     } } ?> Test2.php <?php class Test2 {     public function func2() {         return 'test2';     } } ?> 然而在需要载入这两个文件时,传统的写法是这样的: <?ph

第十二节--类的自动加载_php基础

/* +-------------------------------------------------------------------------------+ | = 本文为Haohappy读<<Core PHP Programming>>  | = 中Classes and Objects一章的笔记  | = 翻译为主+个人心得  | = 为避免可能发生的不必要的麻烦请勿转载,谢谢  | = 欢迎批评指正,希望和所有PHP爱好者共同进步!  +-------------

php类的自动加载操作实例详解_php技巧

本文实例讲述了php类的自动加载操作.分享给大家供大家参考,具体如下: 类的自动加载 在外面的页面中,并不需要去引入类文件,但程序会在需要一个类的时候自动去"动态加载"该类. ① 创建一个对象的时候new ② 直接使用一个类名(操作静态属性与方法) 使用__autoload魔术函数 当出现两种情况时候,就会调用该函数,该函数需要我们预先定义,在其中写好加载类文件的通用语句 function __autoload($name){ require './lib/'.$name.'.clas

zf框架db类的分页示例分享_php实例

zf框架的分页示例 复制代码 代码如下: <?phpisset($_GET['page']) ? $page = $_GET['page'] : $page = 1;//引入Loader类(自动加载类)require_once("Zend/Loader.php");//使用Loader类引入一个Db类Zend_Loader::loadClass("Zend_Db");//引入Zend_Db的状态器Zend_Loader::loadClass("Zen

ThinkPHP3.1新特性之动态设置自动完成和自动验证示例_php实例

以往在ThinkPHP3.1版本之前,如果需要设置自动验证或者自动完成,一般来说必须定义在模型中,或者通过setProperty方法动态设置属性来完成,这样做的缺点是不太方便动态改变和调整. ThinkPHP3.1版本在模型类中增加auto和validate两个连贯操作,用于动态设置自动完成和自动验证规则,现在可以在Action中使用: $validate = array( array('verify','require','验证码必须!'), array('name','','帐号名称已经存在

Zend Framework自定义Helper类相关注意事项总结_php实例

本文讲述了Zend Framework自定义Helper类相关注意事项.分享给大家供大家参考,具体如下: 编写自定义的Helper类 编写自定义的Helper类很容易,只要遵循以下几个原则即可: ① 类名必须是 Zend_View_Helper_*,*是helper的名称.例如,你在写一个名为"specialPurpose"的类,类名将至少是"SpecialPurpose",另外你还应该给类名加上前缀,建议将"View_Helper"作为前缀的一

详解HTTP Cookie状态管理机制_php实例

HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解.首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知道它是如何工作的.第二个问题是对于cookies缺少一个一致性的接口.尽管存在着这些问题,cookies仍旧在web开发中起着如此重要的作用,以至于如果cookie在没有可替代品出现的情况下消失,我们许多喜欢的Web应用将变得毫无用处. 一.cookie 起源 cookie 最早是网景公司的雇员 Lou Mo