首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将类分散到多个源文件中?

问如何将类分散到多个源文件中?
EN

Stack Overflow用户
提问于 2010-07-06 19:19:17
回答 3查看 690关注 0票数 0

我目前正在从事一个PHP项目,其中包括广泛的数据库使用。基本知识是:我有一个遵循工厂模式的PDOFactory类和一个带有静态方法的抽象SQL类(只是这些方法的容器),而后者又与PDOFactory对话

正如我所说,该项目涉及广泛的数据库使用,因此SQL类将包含许多方法。但是,根据它们处理的内容(如会话存储、用户登录/关闭等),它们可以很容易地分组。这将使SQL类更易于维护,等等。现在出现了一个大问题:我能让类内容的来源分布在许多文件中吗?这个问题可以(至少)有两种可能的解决办法:

  • 多重继承,即拥有类SQLSession、SQLUser、SQLblahblah并使SQL类继承所有这些类。
  • 类似C++的预处理器*指令,即#include SQLSession.php;之类的.

我知道中没有多重继承,所以排除了选项1。选项2可能吗?还是有人知道这个问题有更好的解决办法?

*或者实际上是预处理器指令,因为PHP 是前处理器.:)

编辑:

这是一个尝试回答这个问题,根据Kalium的建议。这是一个混乱的阅读,但它的工作。不过,我会坚持比尔的方法,因为它更干净。

代码语言:javascript
复制
class SQL {

  private static $oInstance = false;
  public static function getInstance()
  {
    if( self::$oInstance == false )
    {
      self::$oInstance = new self();
    }
    return self::$oInstance;
  }

  public $SESSION;

  private function __construct()
  {
    $this->SESSION = new SESSION;
  }
}

// this would be in another file
class SESSION {
  public function printOne()
  {
    echo "One";
  }
}


SQL::getInstance()->SESSION->printOne(); // outputs "One"

?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-06 19:21:02

我想你可能走错路了。这肯定不是最好的办法。尝试将许多函数分解为更小的实用程序类,然后使用这些函数组合更大的类。

票数 2
EN

Stack Overflow用户

发布于 2010-07-06 19:30:24

票数 1
EN

Stack Overflow用户

发布于 2010-07-06 19:31:10

我认为您应该将建造者模式用于您的SQL,而不是使用由静态方法组成的多个容器。

不,PHP中没有多重继承。而是使用委托。

不,不能包括文件来定义类的方法。您只能在代码正在执行的上下文中(而不是在类定义的中间)中包含文件:

代码语言:javascript
复制
<?php

include("define-functions.php"); // OK

class Foo
{
  include("define-methods.php");  // ERROR

  function foo()
  {
    include("method-body.php"); // OK
  }
}

PHP Parse error:  syntax error, unexpected T_INCLUDE, expecting T_FUNCTION 
in foo.php on line 7

关于你的评论:

既然您承诺只使用静态方法,那么为什么还要使用类呢?只需在全局范围内定义函数即可。然后,您可以任意多地使用include():

代码语言:javascript
复制
<?php

include("SQLSession.php");
include("SQLUser.php");
include("SQLblahblah.php");

SQLSession.php:

代码语言:javascript
复制
<?php

function SQLSessionStart()
{
   ...
}

function SQLSessionEnd()
{
   ...
}

使用此解决方案,您无法访问静态类成员数据,但可以只使用全局变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3189469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档