php类的注册与自动加载__autoload

注意:__autoload() 内的错误不能被 try-catch 捕获。

 代码如下 复制代码

function __autoload($class_name){

     require_once(PATH.'/calsses/'.$class_name.'.php');

}

$obj1 = new mycalss1();

注册 __autoload() 自动调用的函数:

spl 代码库在 PHP5.0 之后默认自动启用

spl_autoload_register([callback]); //不将具体实现的加载代码写在 __autoload() 内,可使用该函数注册回调函数。

如果使用类的方法作为回调函数需要传入一个数组:

 代码如下 复制代码

spl_autoload_register(array('class_name'|$obj,'method_name'));

例如:

spl_autoload_register(array($this,'autoloadClass'));

spl_autoload_register(array('YiiBase','autoload'));// YII 框架的自动加载类的实现, YiiBase 类实现了一个autoload 方法。  spl_autoload_register() 可以注册多个加载函数,成功加载类文件之前将逐个尝试所有注册的加载函数。这在不同的类使用不同逻辑来导入类文件的时候很有用。

spl_autoload_unregister(); //取消某个注册的加载函数,参数与 spl_autoload_register() 相同.

spl_autoload_functions();// 以数组形式返回所有注册的 __autoload() 函数

 

spl_autoload(class_name[,file_extentions]); // __autoload() 函数的默认实现。 spl_autoload_register() 被调用时如果没有传入 函数名,则默认使用该函数,该函数的执行规则是: 类名转为小写作为文件名,传入的 file_extentions(多个扩展名以逗号隔开,默认为 .inc 和 .php)为扩展名,根据得到的文件名尝试在 php.ini 内设置的 include paths 中搜索。

 spl_autoload_call(class_name);//手动调用所有注册的 __autoload() 函数来主动加载类文件

spl_autoload_extentions([file_extentions]); //注册或返回 spl_autoload() 中可以使用的文件扩展名,扩展名可以是 .a.b 这样的形式,例如:

 

 代码如下 复制代码

spl_autoload_extentions(".class.php");

spl_autoload_register(); //使用spl_autoload() 来尝试自动加载类文件

//这样 spl_autoload('myclassName'); 会尝试加载 文件 "myclassName.class.php" .

实例

1、将需要注册的类放在一个数组中

 代码如下 复制代码

<?php
final class Utils {

    private function __construct() {

    }

    public static function getClasses($pre_path = '/') {
        $classes = array(
                'DBConfig' => $pre_path.'DBConfig/DBConfig.php',
                'User' => $pre_path.'Model/User.php',
                'Dao' => $pre_path.'Dao/Dao.php',
                'UserDao' => $pre_path.'Dao/UserDao.php',
                'UserMapper' => $pre_path.'Mapping/UserMapper.php',
        );
        return $classes;
    }
}
?>

2、注册数组

注意:步骤1中的类的路径都是相对于init.php而言的,不是相对于Utils而言的,这是因为我们通过init.php里的自动加载函数spl_autoload_register来require类的

 代码如下 复制代码

<?php
require_once '/Utils/Utils.php';
final class Init {
   
    /**
     * System config.
     */
    public function init() {
        // error reporting - all errors for development (ensure you have
        // display_errors = On in your php.ini file)
        error_reporting ( E_ALL | E_STRICT );
        mb_internal_encoding ( 'UTF-8' );
        //registe classes
        spl_autoload_register ( array ($this,'loadClass' ) );
    }
   
    /**
     * Class loader.
     */
    public function loadClass($name) {
        $classes = Utils::getClasses ();
        if (! array_key_exists ( $name, $classes )) {
            die ( 'Class "' . $name . '" not found.' );
        }
        require_once $classes [$name];
    }
}
$init = new Init ();
$init->init ();
?>

3、本例中在使用处test.php里require init.php

 

 代码如下 复制代码

<?php
require_once 'Init.php';

$dao = new UserDao();
$result = $dao->findByName('zcl');
?>

时间: 2024-09-23 23:57:08

php类的注册与自动加载__autoload的相关文章

解析php类的注册与自动加载

本篇文章是对php类的注册与自动加载进行了详细的分析介绍,需要的朋友参考下   工程目录如下: 1.将需要注册的类放在一个数组中 复制代码 代码如下: <?php final class Utils {     private function __construct() {     }     public static function getClasses($pre_path = '/') {         $classes = array(                 'DBCon

php基础知识:类与对象(2) 自动加载对象_php技巧

自动加载对象:    很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表.     在 PHP 5 中,不再需要这样了.可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类.  本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClas

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

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

Yii2框架自动加载机制学习

Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件.你可以简单的引入这个文件,你会得到一个自动加载的支持. 在之前的文章,入口文件的介绍中,我们可以看到如下内容: // 引入 vendor 中的 autoload.php 文件,会基于 composer 的机制自动加载类require(__DIR__ .

PHP命名空间和自动加载类_php实例

PHP的命名空间(namespace)是php5.3之后才有的.这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 为什么php中要使用namespace? 假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的.因为php在new的时候不管是调用autoload还是调用已加载过的类,都存在一个类名对应的文件.所以在没有namespace的时候,我们会想各种命名规则来区分不同的类,比如project1_school1_class1_Stu

PHP autoload实现自动加载类

下面是使用autoload机制加载Person类的例子:  代码如下 复制代码 /* autoload.php */    <?php     function __autoload($classname) {   require_once ($classname . "class.php"); }     $person = new Person("Altair", 6); var_dump ($person); ?>     PHP的autoload

PHP的类自动加载机制的笔记

在PHP5之前,各个PHP框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数. 当然,PHP5之前对面向对象的支持并不是太好,类的使用也没有现在频繁. 在PHP5后,当加载PHP类时,如果类所在文件没有被包含进来,或者类名出错,Zend引擎会自动调用__autoload 函数.此函数需要用户自己实现__autoload函数. 在PHP5.1.2版本后,可以使用spl_autoload_register函数自定义自动加载处理函数.当没有调

php自动加载类

很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入.不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,是一个很让人头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里我们要讲的

第十二节--类的自动加载 -- Classes and Objects in PHP5 [12]

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