【25】工具类实现自动载入与类

上一节中我们已经创建了相应的目录,但是我们发现我们创建的类并不能成功的跑起来,这是为什么呢?这主要是因为我们载入的类文件的位置不对造成的,我们之前是根据类名载入的是控制器,所以这里需要进行一下判断:

private static function _autoload($className){
        switch (true) {
        //判断是控制器
        //Controller
            case strlen($className)>10 && substr($className, -10)==‘Controller‘:
                $path = APP_CONTROLLER_PATH.‘/‘.$className.‘.class.php‘;
                if(!is_file($path)) halt($path.‘控制器未找到‘);
                include $path;
                break;

            default:
                $path = TOOL_PATH.‘/‘.$className.‘.class.php‘;
                if(!is_file($path)) halt($path.‘类未找到‘);
                include $path;
                break;
        }
    }

//这里简单讲解一下,首先根据传入的类的名称来判断当前载入的类型,若类的长度大于10并且最后十位等于‘Controller’,那么就说明当前载入的是控制器类,我们组合控制器的路径即可,当然载入之前要判断一下它是否为文件;如不满足上面的条件,则走默认的(也就是加载自定义类了),这里后期可能还会有其他的类型,之后再加上判断即可。

3.到这里,工具类实现自动载入与类就完成了,试一试:

 $Code=new Code();//实例化类
 $Code->show();//调用类中的show方法

是不是能够正常显示了呢........

时间: 2024-12-22 01:49:38

【25】工具类实现自动载入与类的相关文章

PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入

① PHP 面向对象高级特性 ② 11 种 PHP 设计模式 ③ PSR-0,Composer,Phar 等最流行的技术 目标是掌握 PHP 各类设计模式,以及具备设计纯面向对象框架和系统的能力 [命名空间] 早期 php 没有命名空间的概念,所有的代码可以被认为是在同一个命名空间内运行,因此不能出现名称相同的类或函数: php 5.3 增加了命名空间的概念. 例:加入一个项目下有 3 个文件: test1.php: <?php function test(){ echo __FILE__; }

PHP——大话PHP设计模式——命名空间和类的自动载入

开发工具:phpstorm phpstudy 命名空间: 类的自动载入

PHP类的自动载入机制

php的自动加载: 在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 php作者想简单点,最好能引用一个类时,如果当前没有include进来,系统能自动去找到该类,自动引进~ 于是:__autoload()函数应运而生. 通常放在应用程序入口类里面,比如discuz中,放在class_core.php中. 先讲浅显的例子: 第一种情况:文件A.php中内容如下 <?php class A{ public

深入理解PHP类的自动载入机制方法

第一种情况:文件A.php中内容如下 <?phpclass A{ public function __construct(){ echo 'fff'; }}?> 文件C.php 中内容如下: <?php function __autoload($class) { $file = $class . '.php'; if (is_file($file)) { require_once($file); } } $a = new A(); //这边会自动调用__autoload,引入A.php文

PHP 类的命名空间 和自动载入

PHP 类的自动载入有两种方法,__autoload() 和 spl_autoload_register() ,就是在PHP代码中new一个类的时候,会自动触发,将类的类名包括命名空间作为参数传进入方法里,在方法里可根据命名空间和类名准确找到类文件,从而require或者inlcude进来.菜鸟一枚,作为备忘 <?php function auto($class){ //$class = A\B\E; /** 命名空间的自动载入 **/ $class_path = explode("\\&

浅析PHP类的自动加载和命名空间

php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码的维护相当的困难.实际的开发中我们会在文件的开始位置用use关键字使用类,然后直接new这个类就可以了. 至于类是怎么加载的,一般都是框架或者composer去实现的. <?php use Illuminate\Container\Container; $container = new Contai

final,类的自动加载,命名空间

final是干什么的一般是为了防止父类的一个方法被重写如果父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. Note: 属性不能被定义为 final,只有类和方法才能被定义为 final. 类的自动加载类的自动加载是指,在外面的页面中,并不需要去"引入"类文件,但是程序会在需要的时候动态加载需要的类文件. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(in

php设计模式--命名空间与自动载入

关于命名空间: 最早的php是没有命名空间的概念的,这样不能存在相同名称的类或者函数,当项目变大了之后,产生冲突的可能性就高了,代码量也会变大,为了规划,从php5.3开始对命名空间就支持了. 说明代码: test1.php<?php //声明命名空间 namespace Test1; function test(){ echo "test1<br/>"; } test2.php <?php //声明命名空间 namespace Test2; function

php自动载入类的实践

<?php //function __autoload($class_name) {//    require_once $class_name . '.php';//} spl_autoload_register(array("core",'autoload'));//当实例化类的时候,自动调用core类中的autoload()方法来载入类//也可以使用__autoload()来实现,但是php新版本建议使用spl_autoload_register,因为__autoload(