代码之家  ›  专栏  ›  技术社区  ›  fire

为全局访问动态加载类(就像codeigniter那样)

  •  0
  • fire  · 技术社区  · 15 年前

    以下是我的框架的基础:

    class CPU {
    
        public function load_class($class) {
            include_once($class . ".php");
            $this->$class = new $class;
        }
    
        public function load_controller($class) {
            include_once($class . ".php");
            $class = new $class;
            $class->index();
        }
    
        public function run() {
    
            // Load DB class
            $this->load_class("DB");
    
            // Load controller
            $this->load_controller("About");
        }
    }
    
    class About extends CPU {
        public function index() {
            $this->DB->connect();
        }
    }
    

    什么时候? run() 调用以加载 About 类,访问 $DB 错误如下:

    致命错误 :调用非对象上的成员函数connect()

    我想我需要使用一个单例来动态地创建类。CodeIgniter以同样的方式工作,但我不能想出我必须做什么来修改我的框架,使之工作?

    1 回复  |  直到 15 年前
        1
  •  2
  •   David d C e Freitas    15 年前

    我建议使用 __autoload() spl_autoload_register() 加载类而不是硬编码include()。

    关于您的问题,“About”类从未实例化DB的成员。它的父CPU也没有DB成员。换言之,您可能希望DB是CPU的一个成员或大约。不知道你想做什么很难说。

    即使您确实使DB成为其中一个的成员,您仍然需要将其添加到在load_controller()中实例化的About类的实例中。

    换句话说,你似乎真的只是做错了。那个数据库和About根本没有连接。如果不知道你到底想做什么,很难给你更多的帮助。

    关于使用Singleton,这与任何事情都没有关系。单子只是一个你只需要其中一个的类。它们经常被过度使用和误用。小心使用!

    推荐文章