php自动载方法有两种.

但有一问题没有解决, 就是在include前判断文件是否存在的问题.


1

2

3

4

5

6

7

8

9

10

11

12

13

set_include_path(‘aa‘ . PATH_SEPARATOR . get_include_path());

function __autoload($className)

{

    //如果加这个检测, 因为此文件不在当前目录下,它就会检测不到文件存在,

   //但include是能成功的

    if (file_exists($className . ‘.php‘)) {

   include_once($className . ‘.php‘);

    } else {

        exit(‘no file‘);

    }

}

$a = new Acls();

第二种方案用spl自动加载,这里具体说一下这个.

spl_autoload_register()

一个简单的例子


1

2

3

4

5

6

7

8

9

10

11

12

13

set_include_path(‘aa‘ . PATH_SEPARATOR . get_include_path());

//function __autoload($className)

//{

//    if (file_exists($className . ‘.php‘)) {

//        include_once($className . ‘.php‘);

//    } else {

//        exit(‘no file‘);

//    }

//}

spl_autoload_register();

$a = new Acls();

spl_autoload_register()会自动先调用spl_autoload()在路径中查找具有小写文件名的".php"程序.默认查找的扩展名还有".ini",还可以用spl_autoload_extenstions()注册扩展名.

在找不到的清况下,还可以通过自己定义函数查找

function loader1($class)

{

//自己写一些加载的代码

}

function loader2($class)

{

//当loader1()找不到时,我来找

}

spl_autoload_register(‘loader1‘);

spl_autoload_register(‘loader2‘);

还可以更多........

MVC框架是如何实现自动加载的

首先设置路径

‘include‘ => array(

‘application/catalog/controllers‘,

‘application/catalog/models‘,

),

$include = array(‘application/controllers‘, ‘application/models‘, ‘application/library‘);

set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config[‘include‘]));

在获取URL,解析出控制器与方法.

然后设置自动加载


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

class Loader

{

    /**

     * 自动加载类

     * @param $class 类名

     */

    public static function autoload($class)

    {

        $path = ‘‘;

            $path = str_replace(‘_‘, ‘/‘, $class) . ‘.php‘;

        include_once($path);

    }

}

/**

 * sql自动加载

 */

spl_autoload_register(array(‘Loader‘, ‘autoload‘));

路由,实例化控制器,调用方法,你写的东西就开始执行了


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

/**

 * 路由

 */

public function route()

{

    if (class_exists($this->getController())) {

        $rc = new ReflectionClass($this->getController());

        if ($rc->hasMethod($this->getAction())) {

            $controller = $rc->newInstance();

            $method = $rc->getMethod($this->getAction());

            $method->invoke($controller);

        } else

            throw new Exception(‘no action‘);

    } else

        throw new Exception(‘no controller‘);

}


1

1

初步的自动加载就完成了

时间: 2024-08-15 12:30:07

php自动载方法有两种.的相关文章

创建索引的方法有两种

创建索引的方法有两种:创建表的同时创建索引,在已有表上创建索引. 方法一:创建表的同时创建索引. 使用这种方法创建索引时,可以一次性地创建一个表的多个索引(例如唯一性索引.普通索引.复合索引等),其语法格式与创建的语法格式基本相同(注意粗体字部分的代码). Create  table 表名( 字段名1数据类型 [约束条件] 字段名字2   数据类型 [约束条件] - [unique][fulltext] index [索引名](字段名[(长度)] [asc|desc]) )engine=存储引擎

虚方法与两种重写方法的比较

虚方法virtual..override: 1.派生类的方法和基类的方法有相同的签名和返回类型. 2.基类的方法使用virtual标注. 3.派生类的方法使用override标注. class MyBaseClass { virtual pubilc void Print() ... } class MyDerivedClass : MyBaseClass { override pubilc void Print() ... } 注意: 1.重写和被重写的方法必须有相同的可访问性.换一种说法,被

089 重用父类方法的两种方式

目录 一.直接调用指定类的方法 二.通过super()关键字 2.1 使用方法 2.2 使用super调用父类方法 2.3 super()的调用顺序 重用父类方法有两种方式: 指名道姓的使用,直接调用指定类的方法 super关键字使用 一.直接调用指定类的方法 指名道姓的使用,跟继承没有关系.但也能完成需求 class Person: school = 'xxx' def __init__(self,name,age): self.name=name self.age=age def study

Qt打开外部程序的三种方法(两种阻塞,一种不阻塞)

Qt打开外部程序 [cpp] view plaincopy //1.通过调用系统函数 system("opt/myApp"); //这是linux下的,windows下可以用WinExec等函数 //2.通过QProcess,阻塞调用 QProcess::execute("/opt/myApp"); //绝对路径和相对路径都可以,windows下要带exe后缀,系统应用如记事本notepad可直接输入打开 //3.通过QProcess,非阻塞调用 QProcess 

类中方法的两种调用方式

class Foo(object): def func(self, name): print(name) # 第一种,通过实例对象调用func方法 foo = Foo() foo.func('allin') # 第二种,通过类名调用func方法 foo = Foo() Foo.func(foo, 'allin') # 两种方法等价 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11185078.html

直接调用对象方法的两种方式

关于直接调用方法和给对象发送消息调用方法(即perfromSelector和NSInvocation) performSelector是运行时系统负责去找方法的,在编译时候不做任何校验:如果直接调用编译是会自动校验.如果imageDownloader:didFinishWithImage:image:不存在,那么直接调用 在编译时候就能够发现(借助Xcode可以写完就发现),但是使用performSelector的话一定是在运行时候才能发现(此时程序崩溃):Cocoa支持在运行时向某个类添加方法

两种冒泡排序方法调用的修改--一个方法同时实现两种排序

class Program { /// <summary> /// 数组排序 /// </summary> /// <param name="arr">数组</param> /// <param name="b">true为从小到大排列 false为从大到小排列</param> /// <returns>排序完的数组</returns> static int[] Meth

jQuery index() 方法的两种用法

介绍: index() 方法返回指定元素相对于其他指定元素的 index 位置.index()的返回值是一个Number类型,从0开始计数. 语法: $(selector).index(element) 注释: selector可选.规定要获得 index 位置的元素.可以是 DOM 元素或 jQuery 选择器.   用法:     1.如果不传递任何参数给 .index() 方法,则返回值就是jQuery对象中第一个元素相对于它同辈元素的位置. 例子: html代码: <ul> <l

【转】BAT启动执行JAVA JAR文件中的MAIN方法的两种方式

A .导出runnable jar 1. Eclipse导出选择Runnable JAR,选择执行的Main入口函数,执行 java -jar Test.jar,Jar包内包含清单文件,记录了引用到的Jar包和所需要执行的main函数所在的类  2. 如上操作会生成一个Test.jar和包含所有引用的第三方库包的Test_lib文件夹,在Jar包同级目录放入写好命令的Bat文件,执行得到 @echo offtitle test echo start exejava -jar hello.jarp