PHP autoload实现自动加载类

下面是使用autoload机制加载Person类的例子:

 代码如下 复制代码

/* autoload.php */   
<?php    
function __autoload($classname) {
  require_once ($classname . “class.php”);
}    
$person = new Person(”Altair”, 6);
var_dump ($person);
?>    

PHP的autoload机制的实现

要在PHP中实现自动加载类,那就要说到一个魔术方法了,__autoload();这是PHP5添加的自动加载类方法。只要定义了该函数,那么如果PHP运行到该类找不到时,就会根据__autoload的规则去寻找。

自己也规划一下,跟set_include_path和get_include_path来配合使用,使自动加载类更完善点,代码飙一下(模仿magento的):

 代码如下 复制代码

 

$paths[] = BP . DS . ‘app’ . DS . ‘local’;
$paths[] = BP . DS . ‘app’ . DS . ‘base’;
$paths[] = BP . DS . ‘lib’;

$appPath = implode(PS, $paths);
set_include_path($appPath . PS . get_include_path());

这样就可以为PHP添加默认的类加载环境,这里只是把路径添加到了PHP环境,如果还要继续添加规则,可以再定义__autoload函数,不过我这里是对象使用的,就换了一种方法:spl_autoload_register方法,下面是自己根据magento的规则,自己弄了一套,其实跟magento差不多。

 代码如下 复制代码

class Autoload {

/**
* 自身对象
*
*/
protected static $_instance = null;

public function __construct() {

}

/*
* 实例化自身
*
*/

public static function instance() {
if (null == self::$_instance) {
self::$_instance = new self();
}

return self::$_instance;
}

/**
*
* 注册自动加载函数
*/
public static function register() {
spl_autoload_register(array(self::instance(), ‘autoload’));
}

/*
*
* 自动加载类
*/

public function autoload($class) {
if (!is_string($class)) {
return;
}

$classFile = str_replace(‘ ‘, DS, ucwords(str_replace(‘_’, ‘ ‘, $class)));
$classFile .= ‘.php’;
return include $classFile;
}

}

时间: 2024-10-27 00:12:35

PHP autoload实现自动加载类的相关文章

php教程:autoload自动加载类

 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利.这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可 test.class.php <?php class abc{ function __construct() { echo 'www.hzhuti.com; } } ?> load.php 代码如下 复制代码 <?php

Yii2中YiiBase自动加载类、引用文件方法分析(autoload)_php实例

本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. public static function autoload($className) { /* * $classMap是一个name-value数组, * name为类的名称, * value为这个类的文件路径,其中路径可包含别名 * * 首先在$classMap中查找是否设置了类别名路径 */ if

php自动加载类

很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入.不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,是一个很让人头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里我们要讲的

PHP命名空间和自动加载类_php实例

PHP的命名空间(namespace)是php5.3之后才有的.这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 为什么php中要使用namespace? 假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的.因为php在new的时候不管是调用autoload还是调用已加载过的类,都存在一个类名对应的文件.所以在没有namespace的时候,我们会想各种命名规则来区分不同的类,比如project1_school1_class1_Stu

php自动加载类__autoload()的方法

作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部文件包含进来.但是,当要用的外部类很多后,就会发现用包含函数会显得十分的繁琐,这是就可以用__autoload()全局函数自动加载类. 当在index.php中要使用前面三个类时,就需要写三个例如include("name.class.php") 这样的方法,效率会十分低,但如果使用了__autoload()函数就不用这样麻烦了,只需要写这样一个函数方法就可以了: 在 PHP 5 中,不再需要这样了.可

解析zend Framework如何自动加载类

本篇文章是对zend Framework如何自动加载类进行了详细的分析介绍,需要的朋友参考下   1.模块中类的自动载入 复制代码 代码如下: $loader = new Zend_Application_Module_Autoloader(array( //模块内容自动加载类 'namespace' => 'Blog',//命名空间定义 即方法的开头为Blog_ 'basePath' => APPLICATION_PATH . '/modules/blog',//模块位置 )); 2. 自动

CodeIgniter配置之autoload.php自动加载用法分析_php实例

本文实例分析了CodeIgniter配置之autoload.php自动加载用法.分享给大家供大家参考,具体如下: CodeIgniter带了自动加载的功能,可以全局加载类库.模型.配置.语言包等,对于需要全局使用的功能相当方便. 例如:有个全局函数写在app_helper.php中,需要全局加载这个函数,只需设置autoload.php: 复制代码 代码如下: $autoload['helper'] = array('app'); 接下来,所有的地方都可以使用了,配置.模型等配置相似.但方便的同

Yii实现自动加载类地图的方法_php实例

本文实例讲述了Yii实现自动加载类地图的方法.分享给大家供大家参考.具体如下: Yii继承的一个静态属性$classMap,可以用于Yii的自动加载类地图.数组中的键是类名,数组中的值是相应类文件的路径. require_once($yii); $app = Yii::createWebApplication($config); Yii::$classMap = array( 'JPhpMailer' => Yii::getPathOfAlias('ext') . '/phpmailer/JPh

php面向对象全攻略 (十七) 自动加载类_php基础

自动加载类 很多开发者写面向对象的应用程序时,对每个类的定义建立一个PHP 源文件.一个很大 的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP 文件中,当在一个PHP 文件 中需要调用另一个文件中声明的类时,就需要通过include 把这个文件引入.不过有的时候, 在文件众多的项目中,要一一将所需类的文件都include 进来,是一个很让人头疼的事,所以 我们能不能在用到什么类的时候,再把这个类所在的PHP 文件导入