PHP在每个页面上加载所有类

时间:2018-02-20 16:41:50

标签: php

我正在建立一个网站,并且正在加载越来越多的课程。目前我在index.php中包含了每个类,并且我还有一个包含每个类的ajax处理程序,因此我基本上将所有PHP文件包含在ajax调用和网站的每个页面上。

这是不好的做法吗?

我已经尝试了一下,看到有一个名为spl_autoload_register的函数。通过阅读一点,我的理解是,如果找不到类,它会尝试包含定义的文件。但是,它与require_onceinclude_once有什么不同。

假设我将文章放在文件中,然后使用require_once('myclass.php');

class Myclass {

    function myMethod {
        //some code here
    }

}

但是,在使用$class = new Myclass;初始化之前,该类尚未使用所以现在与运行

的区别是什么
function my_autoloader($class) {

    require_once('classes/' . $class . '.php');

}

spl_autoload_register('my_autoloader');

当我想使用它时,我仍然需要使用$class = new Myclass;对其进行初始化。它们中的任何一个都有一些性能提升还是更偏好?

还有一个问题。 PHP应该像使用JS和CSS一样被缩小,还是用PHP来实现这一点毫无意义?

3 个答案:

答案 0 :(得分:2)

2018年,使用自动加载的最佳方式是Composer - 构建以便于工作和性能优化。

4。快速加载课程的步骤

  1. Download composer(即使你的项目开始,也取决于你)

  2. 创建composer.json并告诉他从以下目录加载类的目录或文件:

    {
        "autoload": {
            "classmap": "/src"
        }
    }
    

    使用最开放友好的classmap option

  3. 通过CLI命令重建缓存:

    composer.phar dump
    
  4. 将其包含在index.php

    require_once __DIR__ . '/vendor/autoload.php';
    
  5. 你准备好了!

答案 1 :(得分:1)

如果你不加载每个页面上的每个文件,代码在技术上会运行得更快,但是如果配置“OpCache”,它将在很大程度上消失,它将所有编译的类定义加载到共享记忆。在某些时候,您最终可能会得到一个页面,该页面需要加载90%的代码来完成其工作。 (这也与你关于缩小的问题有关 - PHP是在服务器上编译的,因此缩小对任何人都没有帮助。)

自动加载的另一个优点是维护 - 当你定义一个新类时,你不必将它添加到某些包含的主列表中,确保它在其父类之后加载但是在它的子类等之前,你将类定义放在一个有意义的命名文件和目录中(非常适合人类找到它!)并且自动加载器会在需要时找到它。

答案 2 :(得分:0)

我对TYPO3(PHP)进行了大量测量,包括带有SSD的机器上的数百个类文件。我创建了一个包含所有可用类的脚本。与其他问题相比,课堂阅读并不是一个非常昂贵的部分。

一旦解决了所有更重要的问题,我将专注于此优化。