精华内容
下载资源
问答
  • PHP类自动加载

    千次阅读 2018-10-17 17:35:58
    PHP类自动加载__autoload、spl_autoload_register

    __autoload

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

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

    //foo.php
    <?php
    class Foo{
    	function __construct(){
    		echo __CLASS__ ." in ". __FILE__ ."<br/>";
    	}
    }
    
    class Bar{
    	function __construct(){
    		echo __CLASS__ ." in ". __FILE__ ."<br/>";
    	}
    }
    interface ITest{
    	public function test();
    }
    ?>
    //test.php
    <?php
    function __autoload($className){
        $filename = "./". $className .".php";
        include_once($filename);
    }
    $foo=new Foo();
    $bar=new Bar();
    ?>

    要注意的是如果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
    <?php
    function my_autoload($className){
    	$filename = "./". $className .".php";
        include_once($filename);
    }
    spl_autoload_register('my_autoload');
    
    //PHP5.3支持匿名函数
    spl_autoload_register(function($className){
    	$filename = "./". $className .".php";
        include_once($filename);
    },true,true);
    
    
    $foo=new Foo();
    $bar=new Bar();
    
    class MyTest implements ITest{
    	public function test(){
    		echo "mytest</br>";
    	}
    }
    $t=new MyTest();
    $t->test();
    ?>
    //test3.php
    <?php
    namespace ns;
    
    function my_autoload($className){
    	$filename = "./". $className .".php";
        include_once($filename);
    }
    spl_autoload_register(__NAMESPACE__ .'\my_autoload');
    
    $foo=new \Foo();
    $bar=new \Bar();
    
    ?>

     

    展开全文
  • php命名空间类自动加载

    千次阅读 2015-04-10 18:57:16
    php 5.3以后我们可以使用命名空间来自动加载导入文件,在很多框架中已经实现了自动加载,只需要在全局非命名空间代码中use命名空间就可以直接实例化。 <?php use Package1\Test1; spl_autoload_register...

    在php开发中,需要调用其他文件的类时候,需要将该文件导入到当前的文件中,显得十分的麻烦。在php 5.3以后我们可以使用命名空间来自动加载导入类文件,在很多框架中已经实现了类的自动加载,只需要在全局非命名空间代码中use命名空间就可以直接实例化类。

    <?php
    use Package1\Test1;
    
    spl_autoload_register(function ($class) {
        if ($class) {
            $file = str_replace('\\', '/', $class);
            $file .= '.class.php';
            if (file_exists($file)) {
                var_dump($file);
                include $file;
            }
        }
    });
    
    $t1 = new Test1();

    可以根据需要来实现自己的加载器,用于项目中。
    展开全文
  • 自动加载函数是个魔术方法,这个函数不需要调用是自动会加载调用的,PHP体系内部提供的方法,__ aotuload(),使用形式为: &lt;?php function __autoload($className){ require_once "./".$...

    类的自动加载函数是个魔术方法,这个函数不需要调用是自动会加载调用的,PHP体系内部提供的方法,__ aotuload(),使用形式为:

    <?php
    
    function __autoload($className){
    require_once "./".$className.".php";   // 含义为 当需要一个类的时候 这个函数就会自动加载 出这个目录下的这个类文件
    
    ?>
    
    

    注意:

      自动这个加载函数只能加载某一个目录路径的类文件,如果需要加载其他目录下面的类文件的时候就需要自定义加载函数了

    spl_autoload_register(“函数名”) 先提前声明定义,然后再写对应的函数名中的,和自动加载函数形式类似:

    //先声明一个函数名,提前告知系统将有 个自动加载函数要自己书写
    spl_autoload_register("autoload1");
    spl_autoload_register("autoload2");
    
    function autoload1($className){
        $file="目录".$className.".class.php";
        
        if(file_exits($file)){  // 在这里做了个判断,file_exits()是判断文件或目录是否存在,如果不存在则提示,存在则直接加载
         require $file;
            }else{
                echo "需要加载的类文件不存在!!!";
            }
    
    
          //加载某个目录下面的类文件 (.class.php为文件后缀)
    }
    
    function autoload2($className){
      $file2="目录".$className.".class.php";
      if(file_exits($file)){  
         require $file2;
            }else{
                echo "需要加载的类文件不存在!!!";
            }
    }
    

    当用到这两个目录中的类文件的类的时候,这两个函数就会自动调用,用不到类的时候则不运行,给内存空间也省了许多地方

    也可以直接把这两个函数直接封装进一个自定义加载类方法中去,可以实现多个类的自动加载,方法如下:

    $file1="./class/".$className."tool.php";
    $file2="./file/".$className."tool.php";
    $file3="./exe/config/".$className.".php";
    // 定义的路经变量
    spl_autoload_resgister("autoload");
    //注册一个函数名为autoload的 自定义自动加载类的函数
    function autoload($className){
        if(file_exits($file1)){ // 如果这个类名在这个文件里面,则加载这个file1文件,下方两个同理
    //$className 这个类 的文件 在这个file1路经中能找到这个对应的文件 所以可以加载   
            require_once $file1;
        }else if(file_exits($file2)){
            require_once $file2;
        }else if(file_exits($file3)){
            require_once $file3;
        }
    
    
    }

     

    展开全文
  • php自动加载类 Test

    千次阅读 2016-06-23 15:23:47
    php自动加载类 Test
    //自动加载1
    /*function __autoload($className){
        //echo $className;
        include_once './'.$className.".php";
    }*/
    
    //自动加载2
    
    spl_autoload_register('autoClass');
    
    function autoClass($className){
        include_once './'.$className.".php";
    }
    
    $obj = new Test();
    $obj -> index();
    展开全文
  • PHP类自动加载机制

    万次阅读 2012-04-16 10:21:57
    PHP类自动加载机制  在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,这么...
  • php类文件的自动加载机制

    千次阅读 2014-09-28 11:07:42
    通常情况,在使用php面向对象开发的过程中,一个的定义都是一个文件,这样子下来,当之间需要...在php5之后已经有了自动加载机制,可以定义__autoload函数,在使用到某个未定义的,执行php会出错,但是
  • 简单实现PHP路由和类自动加载

    千次阅读 2017-05-27 16:38:10
    项目目录如下 入口文件index.php  <?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php');...类自动加载文件environment.php
  • laravel 自动加载类

    千次阅读 2018-03-19 09:32:06
    1、需求因项目需要,在某个地方需要使用自定义的,Strtopy.php 使用laravel自动加载类机制2、过程Strtopy.php所在目录 app/Lib/Strtopy.php Lib目录是自己建的目录在composer.json的autoload内的classmap项新增...
  • Yaf框架下自动加载

    千次阅读 2018-04-29 09:48:30
    根据我对Yaf下自动加载方式的理解写下这篇博客。由于接触Yaf框架时间不长,因此如果有不对之处,还望大家不吝指教。 要理解Yaf框架下自动加载方式,还是需要PSR0和PSR4规范作为基础,对于PSR0和PSR4的具体...
  • php自动加载

    千次阅读 2011-11-08 18:37:43
    很多开发者写面向对象的应用程序时对每个的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每...通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的。 http://www.php.net/manual
  • 重温PHP自动加载机制

    千次阅读 2020-06-29 18:05:36
    PHP自动加载机制自动加载的两种方式1. ```__autoload```魔术方法2. ```spl_autoload_register```方法```spl_autoload_register```的使用方式 自动加载的两种方式 1. __autoload魔术方法 该方法使用PHP5和PHP7,并且在...
  • PHP-自动加载原理分析

    千次阅读 2017-11-27 15:44:13
    那么PHP自动加载的前因后果到底是什么?PHP的内部原理又是怎么样的呢?接下来我就根据自己的理解进行一下分析总结: 为什么会有自动加载? 在PHP面向对象(OO)编程中,为了方便管理,我们都会把一个写在一个单独的...
  • &lt;div class="postBody"&gt; &lt;div id="cnblogs_post_body"...但是要想调用,必须要加载文件,或者自动加载。 即便是引入了其中一个,如果没有自动加载机制,还是
  • php自动加载以及php简单路由功能

    千次阅读 2020-08-14 11:59:24
    项目中需要在workernman基础上自己完成基础框架,主要是将用户请求的api路由到具体控制器方法,同时用到的需要自动加载, 原理: 路由:url形如admin/admin/login ,将url分割,获取到具体的,方法,调用这个...
  • 本文实例讲述了PHP MVC框架中自动加载机制。分享给大家供大家参考,具体如下: 原文 实现自动加载主要使用到了set_include_path和spl_autoload_register函数。 set_include_path用于提前设置好可能会...
  • Yii的类自动加载机制

    千次阅读 2016-05-30 15:03:37
    Yii借助了PHP类自动加载机制高效实现了的定位、导入,这一机制兼容 PSR-4 的标准。在Yii中,仅在调用时才会被加载,特别是核心,其定位非常快,这也是Yii高效高性能的一个重要体现。 自动加载机制
  • PHP自动加载功能原理解析

    千次阅读 2017-12-07 01:29:06
    这篇文章是对PHP自动加载功能的一个总结,内容涉及PHP的自动加载功能、PHP的命名空间、PHP的PSR0与PSR4标准等内容。 一、PHP自动加载功能 PHP自动加载功能的由来 在PHP开发过程中,如果希望从外部引入一...
  • 含义:当某行代码需要一个的时候,php的内部机制可以自动加载文件以满足需求。 形式:如function __autoload($name){ require "./".$name.".class.php"; } 条件和要求:当需要一个的时候,就会自动调用某个...
  • 今天写一个demo,遇到一个问题,平时框架用多了,下意识的就以为use就能引入,导致一直跑不成功,后来才意识到use与引用并不是一回事。...的引用创建一个文件ClassA.class.phpnamespace AreaA; class Clas
  • 发现自定义类库的加载方式 是有顺序的。分别是按映射方式 psr4 psr0,其中最高效的,顺序最前的当然是映射方式。我贴出源码,大家看下。private static function findFile($class) { //echo '&lt;pre&gt;';...
  • php搭建mvc框架二(自动加载

    万次阅读 2016-12-26 09:22:03
    spl_autoload_register() 提供了一种更加灵活的方式来实现自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。 下面的就是在上一篇的代码基础上,写的自动加载类的代码展示。 ...
  • 这周利用公司的PHP框架,开发,但是自动加载后,总是找不到该。本文将对记录如何尝试解决这个问题和最后的一些总结思考。 问题描述: 在ActivationService.php定义ActiveService,在Autoload.php注册回...
  • 这个函数是一个自动加载类函数,啥事自动加载函数,顾名思义 ,那就是自己就会加载的函数(原谅我废话了)我们先看下面的代码:<?php function __autoload($classname) { echo "helloworld"; } $obj = new Test1...
  • PSR-0 类自动加载规范

    千次阅读 2016-11-10 14:41:18
    针对PSR-0标准主要提到了以下几点:要求 一个完全合格的命名...每个命名空间在被从文件系统加载时必须被转换为“操作系统路径分隔符”(DIRECTORY_SEPARATOR ) 每个“”字符在“类名”中被转换为DIRECTORY_SEPARATO
  • PHP自动加载函数

    千次阅读 2012-06-28 16:07:31
    __autoload() :PHP原生的函数 spl_autoload():PHP的C扩展函数 ... * 实现自动加载类 * FAQ:需要引入一个文件,如show.php名为Show,然后使用 $obj = new Show(); * 无须使用"include, include_once, r
  • 浅谈PHP自动加载类库机制

    千次阅读 2014-05-10 13:10:18
    php开发过程中
  • php自动加载机制的实现

    万次阅读 2018-08-15 12:52:43
    自动加载就是当我们在当前文件中实例化一个不存在的时,调用自动加载机制引入相应的文件。 注:自动加载有两种方式(都是php内置的),一种是通过__autoload(),另一种是通过spl_autoload_register()。 以下两...
  • 说说PHP5的自动加载类机制

    千次阅读 2008-09-15 19:41:00
    为了避免每次实例化时需要包含文件的麻烦,PHP5提供了自动加载类的新特性:__autoload()方法。简单举例说明__autoload()的使用:function __autoload($class){ require "$class".".php";}$news = new news();$...
  • PHP自动加载某一文件夹下的文件

    千次阅读 2018-08-22 16:53:35
    //自动加载当前文件夹外同级目录 spl_autoload_register(function ($class_name) {  require_once dirname(dirname(__FILE__))."/smsclass/".$class_name.".php";  });  $server = '...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,435
精华内容 47,374
关键字:

php类的自动加载方式