`
juggler
  • 浏览: 169504 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

PHP5中比较好用的功能:动态加载类文件

PHP 
阅读更多
PHP中的类加载并没有JAVA中那么方便,而且PHP是过程夹面向对象的语言,方式和JAVA很大的不同。


一般情况下都是一个类一个文件,然后在用到时require或include一个类文件,比如在Page类中如果要用到Meta类,那么要在类的前边加上一句:
file Page.php
require("Meta.php");

class Page {
	//....code
}


但是如果同时又有一个类Robbin要用到呢?用上面的方法?没问题。
file Robbin.php
require("Meta.php");

class Robbin {
	//.....code
}


如果有个Main类要用到上面两类呢?用上面的方法:
file Main.php
require("Page.php");
require("Robbin.php");

class Main {
	//....code
}


结果一运行,出错,错误信息是,重复定义的类别Meta。为什么会这样呢?哦,原来是这样的,因数require/include的功能是把某文件包含在本程序文件中,那么当Robbin和Page都包含Meta.php文件时,那么就会出现两个Meta类的定义,也就会发生错误。

有些PHPer就会用到require_once/include_once这样的指令,虽然是解决了上面的问题,但是并不是最好的方法。

又有另一种方案,也就是说,不在任何类中加入require这样的指令,而在最顶层使用到这个类时再加入,比如Main.php文件中可以这样定义:
file Main.php
require("Robbin.php");
require("Page.php");
require("Meta.php");

class Main{
	//....code
}


但是这样常常会遇到问题,什么问题,就是有些类,比如说上层类使用到比较底层的类时,我们不可能全部知晓,那么我们只能看出错信息一个又一个的把它们require进来,但是这样也太麻烦了,有没有更为方便的方法呢?

有!
方案如下:
定义一个系统的预定义函数 __autoload($classname)。
这是PHP5中的一个新特性,可以让各位PHP减少用require的次数,简直就是太棒了。
参数$classname是类名,系统在未找到这个类时,会先调用__autoload函数,因为__autoload函数是由我们实现的,所以我们必须根据$classname来include相关的文件(不用require是有理由的,后面再说)。比如我现在这个项目中用到的__autoload的定义:
file auto_loader.php
function __autoload($classname) {
	if (preg_match('/\w*Helper$/', $classname)) {
		include("classes/" . $classname . ".php");
	} elseif (preg_match('/\w*Config$/', $classname)) {
		include("configs/" . $classname . ".php");
	} elseif (preg_match('/\w*Exception$/', $classname)) {
		include("classes/exception/" . $classname . ".php");
	} else {
		include("classes/utils/" . $classname . ".php");
	}
}


只要在最顶层的程序文件中加入这个,那么我只要记得类名就可用这个类,而不用require任何类文件,因为系统已经自动调用__autoload函数把相关的文件include进来了。

回答前面那个问题,那么为什么不用require而用include呢?PHPer都应该知道,include是动态执行的,也就是说执行到include这个语句时才把文件包含进来,而require是预先执行的,也就是说,在php文件在执行前就已经把相关的文件包含进来,组成一个大文件,如果上面的include改成require,当然也可以执行,但是这样并不会达到好的性能。

这样就鼓励PHP程序员们多使用类,而不是函数,这样的话就可以减少require的麻烦。

其实PHP是很好用的,只是有些缺点,一次请求就是一次过程,每一次请求都不能共享数据,这造成一些性能问题,而这些在JAVA世界没有,所以向往JAVA。

----

今天心很难过,坚持着,会好起来的。
分享到:
评论

相关推荐

    PHP文件自动加载

    - **路径固定**:类文件的位置是固定的,不支持动态路径。 - **命名规则依赖**:依赖于类名和文件名的一致性。 #### 三、spl_autoload_register() `spl_autoload_register()` 是PHP 5.3引入的一种更灵活的自动加载...

    php中使用文件缓存类.zip

    本篇文章将深入探讨PHP中的文件缓存类及其应用。 首先,我们需要理解文件缓存的基本原理。当PHP脚本执行时,如果需要的数据已经存在于缓存文件中,那么直接读取文件内容,而不是重新执行复杂的计算或数据库查询。...

    实用的php文件操作类.zip

    在PHP编程中,文件操作是不可或缺的一部分,它涵盖了读取、写入、移动、复制、删除等文件管理功能。为了方便开发者,许多类库被创建出来,以提供更高效、安全且易于使用的文件操作接口。"实用的PHP文件操作类"就是...

    CSV文件处理PHP类

    PHP作为一个服务器端脚本语言,提供了处理CSV文件的强大功能,而这里提到的“CSV文件处理PHP类”进一步封装了这些功能,提供了更便捷的数据操作接口。 这个PHP类可能包含以下关键功能: 1. **读取CSV文件**:类...

    PHP文件上传类+分页类+验证码类

    在PHP开发中,文件上传、分页显示以及验证码的生成是常见的功能需求。这些功能的实现通常需要专门的类库来处理,以提高代码的可重用性和维护性。下面将详细讲解这三个类的用途、原理及如何使用。 1. **PHP文件上传...

    linux中php调用so

    在Linux环境中,PHP调用SO(Shared Object)文件是一种常见的技术,用于扩展PHP的功能或集成其他C库。SO文件是Linux下的动态链接库,相当于Windows系统中的DLL文件。本篇文章将深入探讨如何在PHP中使用SO文件,以及...

    php5解压就可用

    这个“php5解压就可用”的压缩包显然包含了PHP5的源代码或者预编译二进制文件,使得用户可以在本地环境中快速搭建一个支持PHP的服务器,特别是与Apache web服务器集成。 在描述中提到的“配合apache”,意味着这个...

    php实现的压缩文件的上传与下载功能模块.rar

    在PHP中实现压缩文件的上传与下载功能是Web开发中常见的需求,这涉及到文件操作、HTTP请求处理以及可能的文件安全问题。以下是一些相关的知识点: 1. **文件上传**: - PHP提供了`$_FILES`全局数组来接收上传的...

    ThinkPHP5文件管理平台

    1. 文件上传:TP5提供了内置的文件上传功能,可以轻松处理文件上传操作。通过`request`对象的`file`方法获取上传文件,然后通过`move`方法移动文件到指定目录,实现文件上传。 2. 分类管理:为了实现文件的分类存储...

    php文件页面缓存类.zip

    在PHP编程中,缓存是一种优化网站性能的重要技术,它能减少服务器的负载,提高页面加载速度,尤其在处理大量数据库查询或者复杂计算时效果显著。本篇文章将深入探讨PHP中的文件缓存类,以及如何利用它来实现高效的...

    一个好用的php模版解析类

    而`php模版解析类`文件很可能是实现这个功能的PHP源代码,我们可以查看其内部实现,学习如何编写这样的解析类,或者直接将其集成到我们的项目中。 通过深入理解并应用这样的PHP模板解析类,我们可以提高开发效率,...

    linux下独立程序执行php文件

    在Linux环境下,独立程序执行PHP文件是一个常见的需求,特别是在自动化脚本、服务器管理和持续集成等场景中。这里提到的"snail007-phprunner-0ce9948"可能是一个专为此目的编写的特定工具,允许你在不依赖系统PHP...

    一个读取远程文件的php函数类.zip

    这个"一个读取远程文件的php函数类.zip"提供的功能就是解决这类问题的一个工具。在这个压缩包中,包含了一个PHP类,它提供了一种结构化的方式来执行远程文件的读取操作。下面,我们将深入探讨相关的知识点。 首先,...

    PHP实例开发源码—压缩文件类.zip

    5. **文件流操作**:为了高效处理大文件,类可能会使用PHP的文件流(file streams)功能,允许逐块读写,而不是一次性加载整个文件到内存中。 6. ** ZIP Archive 类**:PHP 自带了 `ZipArchive` 类,可以直接用来...

    php开发常用的类 特好用

    在PHP开发中,类是面向对象编程的基础,用于封装数据和功能。以下是一些常见的PHP类及其用途,这些类在实际开发中非常实用。 1. 数据库类:在PHP中,我们经常使用数据库类来与MySQL、PostgreSQL、SQLite等数据库...

    php加载和生成json和生成xml文件,并带有ajax分页效果,带图带数据库

    在PHP中,可以使用`json_encode()`和`json_decode()`处理JSON数据,而`DOMDocument`类和`SimpleXMLElement`类用于处理XML。 在PHP生成JSON时,首先需要创建一个数组或对象,然后使用`json_encode()`将其转换为JSON...

    php + flash 大文件 上传显示进度

    实现这个功能的关键在于使用Flash的`FileReference`类,它可以监控文件上传的进度,并通过`upload`方法将数据发送到服务器。同时,Flash需要与PHP进行Ajax通信,通常是通过XMLSocket或者XMLHttpRequest(XHR)来实现...

    php ajax mysql 点击加载更多 分页

    在网页开发中,"php ajax mysql 点击加载更多 分页" 是...5. 前端JavaScript解析响应数据,更新页面上的列表,实现动态加载。 这样的设计既提高了页面性能,又优化了用户交互体验,使得大量数据的加载变得平滑且高效。

    PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间

    我们将从以下几个方面展开讨论:动态创建属性和方法、对象的复制与比较、加载指定文件、自动加载类文件以及命名空间的使用。 首先,动态创建属性和方法是PHP面向对象编程中的一个重要特性。在PHP中,可以利用魔术...

    php文件在线压缩程序类.zip

    "php文件在线压缩程序类.zip"这个资源提供了一个用PHP编写的文件在线压缩类库,它利用了PHP自身提供的压缩功能,而不是依赖于像RAR这样的第三方库,这使得程序更加轻便且易于部署。 该压缩程序类库的工作原理基于...

Global site tag (gtag.js) - Google Analytics