• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP类的自动加载与命名空间用法实例分析

    本文实例讲述了PHP类的自动加载与命名空间用法。分享给大家供大家参考,具体如下:

    作为一名合格的程序员,必定会有一个从面向过程编程到面向对象编程的转化过程,在这个过程中诸如命名空间,类,继承,接口,类自动加载等等都是需要我们去掌握的,之前对这些概念都不是很熟悉,只是能够基础地使用,在这里系统的记录一下关于命名空间与类的自动加载知识。

    类的自动加载

    什么是自动加载类?

    ? ? 从字面意思上就可以大概知道,当调用一个当前页面未定义的类的时候能够自动加载。
    相信如果你之前了解过php的魔术方法的话,肯定不会对__autoload这个魔术方法感到陌生。php官方手册解释:尝试加载未定义的类

    void __autoload ( string $class )
    
    

    class即为待加载的类名。php官方手册也有比较好的例子,这里引用一下:

    ./myClass.php

    ?php
    //在这里定义一个构造方法
    class myClass {
     public function __construct() {
      echo "myClass init'ed successfuly!!!";
     }
    }
    ?>
    
    

    ./index.php

    ?php
    // 将这些代码写在我们需要用到的地方
    function __autoload($classname) {
     $filename = "./". $classname .".php";
     include_once($filename);
    }
    
    // 实例化一个类
    $obj = new myClass();
    ?>
    
    

    "在这一行,我们的"./myClass.php"会被包含进来,这个神奇效果正是我们想要的 你将会得到"myClass init'ed successfuly!!!"的返回结果.

    所以,如果你调用了一个类似于"myClass"的类,文件将会包含"myClass.php",前提是该文件存在(如果不存在你将会得到一个引用错误),如果你调用了"Foo","Foo.php"会被引用,诸如此类...

    你在也不需要像下面这样写了。"

    ?php
    include_once("./myClass.php");
    include_once("./myFoo.php");
    include_once("./myBar.php");
    
    $obj = new myClass();
    $foo = new Foo();
    $bar = new Bar();
    ?>
    
    

    虽然说这个魔术方法确实很magic,但是他有一个缺点,那就是只能使用一次,当需要多条 autoload 函数的时候就不行了,所以官方不推荐使用,在后续版本可能会被移除。同时官方也给出了可以替代的函数spl_autoload_register,将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。

    bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

    直接用例子在说明吧,这里与命名空间一起讲:

    #新建工程test

    //首先新建应用目录app,然后在目录下新建一个Test文件夹,文件夹下新建两个类

    test/app/Test/Beta.php

    ?php
    namespace app\Test;
    class Beta {
     public function index() {
      echo "app\Test\Beta\index";
     }
    }
    
    

    test/app/Test/Test.php

    ?php
    namespace app\Test;
    class Test {
     public function index() {
      echo "app\Test\Test\index";
     }
    }
    
    

    //新建自动加载类
    test/app/autoload/Loading.php

    ?php
    namespace app\autoload
    class Loading {
     public static function autoLoad() {
     //把 \ 转换层 / , 便于兼容Linux文件找。Windows 下是通用的
      $fileName = str_replace('\\', '/', DIR . '\\'. $className) . '.php';
      if (is_file($fileName)) {
       require_once $fileName;
      } else {
       echo $fileName . ' is not exist'; die;
      }
     }
    }
    
    

    //新建应用入口文件
    test/index.php

    define('DIR', dirname(__FILE__));// /.../test
    //引入自动加载文件
    require DIR . "/autoload/Loading.php";
    //自动注册
    //这里就是为什么前面写成静态方法的原因
    spl_autoload_register("\\autoload\\Loading::autoLoad");
    //然后在下面就可以直接调用类了,只要在前面加上命名空间
    $beta = new app\Test\Beta();
    $beta->index();//输出 app\Test\Beta\index
    echo "\r\n";
    $test = new app\Test\Test();
    $test->index(); //输出 app\Test\Test\index
    
    

    命名空间

    看到这里相信你应该已经对命名空间有了一个大致的了解,起码知道怎么用。

    什么是命名空间?

    从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。

    所以你可以将他理解为:文件夹。。。

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP类的自动加载机制实现方法分析
    • php类的自动加载操作实例详解
    • php类自动加载器实现方法
    • 解析php类的注册与自动加载
    • php类自动加载失败的处理方案及实例代码
    上一篇:如何在PHP中生成随机数
    下一篇:PHP标准库 (SPL)——Countable用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP类的自动加载与命名空间用法实例分析 PHP,类,的,自动,加载,与,