首页 > 作文

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

更新时间:2023-04-08 17:43:57 阅读: 评论:0

本文实例讲述了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”会被引用,诸如此类…

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

<?phpinclude_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 = fal ]]] )

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

#新建工程test

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

test/app/test/beta.php

<?phpnamespace app\test;class beta { public function index() {  echo "app\test\beta\index"; }}

test/ap规律性p/test/test.php

<?phpnamespace app\test;class test { public function index() {  echo "app\test\test\index"; }}

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

<?phpnamespace app\autoloadclass loading { public static function autoload() { //把 \ 转换层 / , 便于兼容linux文件找。windows 下是通用的  $filename = str_replace('\\', '/', dir . '\\'. $classname) . '.php';  if (is_file($filename)) {   require_on语文阅读理解万能公式ce $filename;  } el {   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\indexecho "\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。这个原理应用到程序设计领域就是命名空间的概念。

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

本文发布于:2023-04-08 17:43:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b5a00a8c15c83994b0abfb6098d76627.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP类的自动加载与命名空间用法实例分析.doc

本文 PDF 下载地址:PHP类的自动加载与命名空间用法实例分析.pdf

下一篇:返回列表
标签:空间   文件   自动加载   如果你
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图