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

    2016-01-13 11:58:58
    PHP自动加载类

    方法一:在类外部写自动加载的魔术方法

    	//写在类外面
    	function __autoload($name){
    			//处理$name,获得类路径
    			include $name_path;
    		}	
    方法注册自动加载方法

    	class ClassA{
    		public static $_autoload;
    		public function __construct(){
    			//注册,使用定义方法进行加载
    			spl_autoload_register(array('ClassA','classAutoLoader'));
    		}
    		//ClassA 如果实例化可以不用静态方法
    		public static function classAutoLoader($name){
    			//处理$name,获得类路径
    			include $name_path;
    		}
    	}


    展开全文
  • php自动加载类

    2018-12-08 17:05:32
    PHP自动加载类 在PHP5之前我们还可以使用PHP的自动加载函数http://php.net/manual/zh/function.autoload.php __autoload(),在PHP7之后官方推荐的就是 http://php.net/manual/zh/function.spl-autoload-register.php ...

    PHP自动加载类

    在PHP5之前我们还可以使用PHP的自动加载函数http://php.net/manual/zh/function.autoload.php __autoload(),在PHP7之后官方推荐的就是

    http://php.net/manual/zh/function.spl-autoload-register.php sql_autoload_register()
    这里就拿它们做比较 __autoload() VS spl_autoload_register()

    • __autoload()
      1. 官方给出的说明是尝试加载未定义的类
      2. 它的参数就只有一个 string [$class],字符串类型的要加载的类名
      3. 没有返回值
    <?php
    //这里我们创建TestClass.php
    //./TestClass.php
    namespace Test;
    
    class TestClass
    {
        public function myTestClas()
        {
            echo "这是测试函数";
        }
    }
    
    //这里我们创建index.php
    
    ./index.php
    <?php
    function __autoload($className)
    {
         $fileName = __DIR__ . '/' . $className .".php";
         include_once($fileName);
    }
    
    $obj = new TestClass();
    $obj->myTestClass();
    
    • spl_autoload_register()
      1.官方给出的说法是 注册给定的函数作为 __autoload 的实现,就是我们通过这个函数注册一个函数,我们在这个函数里具体的实现,让文件函数自动加载
      2.参数一:autoload_function
      欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。
      参数二:throw
      此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常
      参数三:prepend
      如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
      3.返回值,成功返回true,失败返回false
    ./TestClass.php
    <?php
    
    class TestClass
    {
        protected $_index;
        public function __construct($index) 
        {
            echo $this->_index = $index;
            echo "<hr />";
            echo "这是 spl_autoload_register()";
        }
    }
    
    ?>
    
    
    ./index.php
    
    <?php
    
    function myAutoload($class)
    {
        include __DIR__ . '/' . $class . '.php';
    }
    
    spl_autoload_register('myAutoload');
    
    $obj = new TestClass('Index');
    

    【这里有一个比较正式的实现—》

    https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

    <?php 
    
    function myAutoload($className)
    {
        $className = ltrim($className,'\\');
        $fileName  = '';
        $namespace = '';
        if ($lastNsPos = strrpos($className,'\\')) {
            $namespace = substr($className,0,$lastNsPos);
            $className = substr($className,$lastNsPos + 1);
            $fileName  = str_replace('\\',DIRECTORY_SEPARATOR,$namespace) . DIRECTORY_SEPARATOR;
        }
        $fileName .= str_replace('_',DIRECTORY_SEPARATOR,$className).'.php';
        
        require $fileName;
    }
    
    spl_autoload_register('myAutoload');
    
    
    展开全文
  • PHP 自动加载类

    2019-09-30 19:43:39
    自动加载 (Autoloading Classes) 在编写面向对象(OOP) 程序时,很多开发者为每个新建一个 PHP 文件。 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个都有个文件)。 ...

    类的自动加载 (Autoloading Classes)

     

    在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件。 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件)。

     

    在 PHP 5 中,已经不再需要这样了。 spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

     

    Tip

    尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_register() 函数。spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载(同一个应用中,可以支持任意数量的加载器,比如第三方库中的)。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

     

    Note:

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

     

    Note:

    自动加载不可用于 PHP 的 CLI 交互模式

     

    Note:

    如果类名比如被用于 call_user_func(),则它可能包含一些危险的字符,比如 ../。 建议您在这样的函数中不要使用用户的输入,起码需要在 __autoload() 时验证下输入。

     

     

     

    自动加载示例

    ClassInterface.php

    <?php
    interface ClassInterface {
        public function print();
        public function get_current_time();
    }

     

    MyClass1.php

    <?php
    class MyClass1 implements ClassInterface
    {
        public $flag = 'MyClass1';
    
        public function print() {
            echo $this->flag;
        }
    
        public function get_current_time() {
            echo $this->flag . " : " . date("Y-m-d H:i:s",time());
        }
        
    }

     

    MyClass2.php

    <?php
    class MyClass2 implements ClassInterface
    {
        public $flag = 'MyClass2';
    
        public function print() {
            echo "MyClass2";
        }
    
        public function get_current_time() {
            echo $this->flag . " : " . date("Y-m-d H:i:s",time());
        }
        
    }

     

    autoload.php

    <?php
    date_default_timezone_set('Asia/Shanghai');
    spl_autoload_register(function ($class_name) {
        require_once $class_name . '.php';
    });
    
    $obj  = new MyClass1();
    $obj2 = new MyClass2();
    $obj->print();
    echo "<br>";
    $obj->get_current_time();
    echo "<br>";
    $obj2->print();
    echo "<br>";
    $obj2->get_current_time();

     输出结果:

     

     

     

     

    转载于:https://www.cnblogs.com/ryanzheng/p/11405142.html

    展开全文
  • 主要介绍了PHP 自动加载类原理与用法,结合具体实例形式分析了PHP 自动加载类基本概念、原理、使用方法及操作注意事项,需要的朋友可以参考下
  • 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自动加载类的方法

    2018-11-24 19:45:36
    php自动加载类的方法 废弃的函数:__autoload(): test.class.php: &lt;?php class test{ public function index(){ return "index"; } } ?&gt;  demo.php实例化这个类: &lt;?...
  • 这是如何自动加载我的控制器文件夹中的所有,# auto load controller classesfunction __autoload($class_name){$filename = 'class_'.strtolower($class_name).'.php';$file = AP_SITE.'controllers/'.$filename;...
  • php 自动加载类文件

    2021-04-26 11:05:17
    打印结果: Java
  • PHP 自动加载类 __autoload() 方法 __autoload() 方法用于自动加载类。 __autoload() 在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就...
  • spl_autoload_register函数是实现自动加载未定义功能的的重要方法,所谓的自动加载意思就是 我们的new 一个的时候必须先include或者require的文件,如果没有include或者require,则会报错。那这样我们就必须在...
  • PHP自动加载类的方法

    2020-03-05 16:38:28
    __autoload:当实例化一个对象...spl_autoload_call:这个方法会尝试调用所有已经注册的_autoload方法来加载请求的。 spl_autoload_funcitons:获取所有被注册的__autoload方法。 spl_autoload_register:注册__au...
  • php自动加载类 __autoload()函数,很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表。  很多开发者...
  • 但一个个去引入这些类比较麻烦,就要用到自动加载类 自动加载: 法一:可以定义一个 _autoload()函数,它会在试图使用尚未被定义的类时自动调用,通过调用此函数,脚本引擎在PHP出错 失败前有了最后一个机会...
  • 这个也不是新技术,不过还是有必要写下。在我们加的时候,一般需要将文件包含进来不管用include还是require...那么我们的文件都放在class目录下,我们在入口文件index.php文件里声明自动加载class目录下的。...
  • 一个php自动加载类

    2017-12-10 22:23:00
    php /** 本文件放在程序的根目录下 */ define("ROOT",dirname(__FILE__));//获取当前脚本文件所在路径 //包含所需要的文件夹 set_include_path(".".PATH_SEPARATOR.ROOT."/a".PATH_SEPARATOR.ROOT."/core"....
  • 1、__autoload 在实例化一个对象时会自动调用此函数实现文件的加载也就是在使用new 关键字时会触发<?php function __autoload($className){ require_once $className . '.php' ; } ?> 2、spl 常用方式 spl_...
  • PHP自动加载类的实例

    2014-12-02 14:21:11
    我们在做PHP开发的时候,有的时候需要一个一个的文件引入感到实在是烦,其实我们可以利用PHP的一个函数 __autoload($class) 来进行自动载入!当然方法有很多,下面例举一法,具体方法如下:准备两个文件:1.test.php...
  • PHP自动加载类文件

    2011-07-17 17:58:16
    1.在使用$_POST[ ]或$_GET[ ]时,经常出现警告错误,在PHP语句中加入 error_reporting(E_ALL & ~E_NOTICE);...2.自动挂载文件 function __autoload($className){ include strtolower($classNam...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,054
精华内容 821
关键字:

php自动加载类