zoukankan      html  css  js  c++  java
  • 【php】命名空间 和 自动加载的关系

    目的

    本文的目的主要是说明 命名空间的 use 关键词 和 new ClassName 这两个步骤,哪个步骤才会执行自动加载,这是逻辑有点混乱的表现,这种想法也是很正常的,让我们来解密吧

    命名空间(namespace)

    php从5.3加入了命名空间,我略懂一些java,所以命名空间还是比较好理解的,为什么需要命名空间啦?主要解决自己写的内部类/函数/常量  和 第三方的类/函数/常量冲突

    。引用命名空间下资源都要 使用关键字 use 标明 例如

    require_once("apanly/BrowserDetector/Browser.php");
    use apanlyBrowserDetectorBrowser;
    new Browser();

    自动加载

    php可以自定义自动加载函数,主要减少include 和 require 的使用。例如

    function myLoader($classname){
       $class_file = $classname . '.php';
       if ( file_exists($class_file) ){
          require_once($class_file);
       }else{
          echo "[ autoload error ]".$class_file." not found";
          die(0);
       }
    }
    spl_autoload_register("myLoader");

    疑问

    是 use 的时候 会执行 myLoader 自动记载函数 还是 new 一个对象的时候会执行自动加载函数?

    答案是: new 一个对象的时候 会执行自动加载函数

    示例演示

    use 测试

    <?php
    //根据class名字 找文件
    function myLoader($classname){
       $class_file = $classname . '.php';
       if ( file_exists($class_file) ){
          require_once($class_file);
       }else{
          echo "[ autoload error ]".$class_file." not found";
          die(0);
       }
    }
    
    spl_autoload_register("myLoader");
    
    use apanly	est	est;
    new test();

    没有任何输出

    new 测试

    <?php
    //根据class名字 找文件
    function myLoader($classname){
       $class_file = $classname . '.php';
       if ( file_exists($class_file) ){
          require_once($class_file);
       }else{
          echo "[ autoload error ]".$class_file." not found";
          die(0);
       }
    }
    
    spl_autoload_register("myLoader");
    
    use apanly	est	est;


    输出 :

    [ autoload error ]apanly	est	est.php not found

    结论

    use 只是标明该使用那个命名空间,new 对象才是真真执行自动加载的触发器。命名空间和自动加载没有半毛钱关系

    参考资料



    原文地址:【php】命名空间 和 自动加载的关系
    标签:use   autoload   namespace   

    智能推荐

  • 相关阅读:
    stm32之不定长接收
    3、列表和列表项
    2、FreeRTOS任务相关API函数
    1、FreeRTOS移植
    5、根文件系统原理
    1、c++对c语言的扩展
    4、移植三星官方内核
    3、内核的启动过程
    2、内核的配置和移植
    iOS学习笔记19-地图(一)定位CoreLocation
  • 原文地址:https://www.cnblogs.com/apanly/p/6101459.html
Copyright © 2011-2022 走看看