2

我的理解是“name”.class.php 是在 PHP 中创建类的标准约定,因此我为每个类都有一个单独的文件。我想做的是将我的小型 php 类层次结构合并到一个文件中……比如说,consolidated.class.php。

这将使上传/下载到服务器更容易+如果我需要运行简单的文本搜索,我不必查看多个文件。此外,我可以删除 include / require,因为我基本上是手动插入它们。

问题是,我可以在不影响性能的情况下进行整合吗?

编辑/更新

很久以后,我使用了单独的文件和一个自动加载器。这应该更有效,但当然,多少取决于文件的大小。

4

4 回答 4

3

人们使用每个文件约定一个类的原因是类自动加载器。这允许您的脚本仅自动加载您的脚本在该特定实例中实际使用的代码。如果每次加载页面时都加载所有类,那么这是一种相当低效的方法。

有关类自动加载器的更多信息:

http://php.net/manual/en/language.oop5.autoload.php

http://php.net/manual/en/function.spl-autoload-register.php

于 2011-05-19T23:07:10.297 回答
3

我相信这取决于项目的规模。您可以从小处着手,将所有内容都放在一个文件中,然后随着代码的积累以及您对所建模领域的更好理解,您可以将单元提取到单独的文件中。

每个文件使用一个类的约定来自 Java 世界。多年来,PHP 一直在尝试模仿 Java,但有些做法是荒谬的。就像,你不能有函数,只有类,即使它们只不过是静态方法的集合。

这是一个名为Konstrukt的 Web 框架示例,它在每个文件中使用多个单元(类/函数/常量),并且似乎运行良好。

正如@Nabeel 所说,如果所有内容都在一个大文件中,您可能会遇到定位代码的问题。根据您正在开发的项目来判断。

关于性能,您必须进行基准测试,因为它再次取决于项目,但是由于文件 I/O 会产生一些性能开销requireinclude因此,每个请求加载一个文件可能会更好。实际解析可能比查找文件所需的系统调用更快。

于 2011-05-19T22:28:34.060 回答
0

我建议你不要这样做,因为页面的所有内容都会被查看,你的每一个类都会被加载。当只使用每次加载的几个类时,在性能方面确实没有区别,但是如果你有很多类并且只使用少数几个,这取决于正在加载的页面,你会添加一个巨大的重载这页纸。

于 2011-05-19T22:07:07.463 回答
0

我不想和其他人说同样的话(这实际上是正确的^^)给你带来一些新的想法。

我会创建一些函数来包含/需要我的类文件。

例子:

你有 2 个 php 文件:

1:登录.php

2:注册.php

<?php
   // login.php
   include '../system/functions/myFunctions.php';  
   loadMyClasses(1);
?>

<?php
  // register.php
  include '../system/functions/myFunctions.php';
  loadMyClasses(2); 
?>

<?php
  //myFunctions.php

  DEFINE("CLASS_PATH", "../system/class/");      

  function loadMyClasses($type_id)
  {  
     //Example: Load in everytime. These files are always required.
     require_once CLASS_PATH.'class.database.php';
     require_once CLASS_PATH.'class.sql.php';

     if($type_id == 1)
     {
           require(CLASS_PATH.'class.security.php');
           require(CLASS_PATH.'class.cryptor.php');   
           require(CLASS_PATH.'class.login.php');   
     }

     if($type_id == 2)
     {
           require(CLASS_PATH.'class.security.php'); 
           require(CLASS_PATH.'class.register.php');  
     }
  }
?>

这样您就可以简单地更改类或接口文件的路径。您只需在一个文件中进行更改。

我希望,我能帮上一点忙!

于 2011-05-19T22:41:03.150 回答