我目前正在从事一个PHP项目,其中包括广泛的数据库使用。基本知识是:我有一个遵循工厂模式的PDOFactory类和一个带有静态方法的抽象SQL类(只是这些方法的容器),而后者又与PDOFactory对话
正如我所说,该项目涉及广泛的数据库使用,因此SQL类将包含许多方法。但是,根据它们处理的内容(如会话存储、用户登录/关闭等),它们可以很容易地分组。这将使SQL类更易于维护,等等。现在出现了一个大问题:我能让类内容的来源分布在许多文件中吗?这个问题可以(至少)有两种可能的解决办法:
SQLSession、SQLUser、SQLblahblah并使SQL类继承所有这些类。#include SQLSession.php;之类的.我知道中没有多重继承,所以排除了选项1。选项2可能吗?还是有人知道这个问题有更好的解决办法?
*或者实际上是预处理器指令,因为PHP 是前处理器.:)
编辑:
这是一个尝试回答这个问题,根据Kalium的建议。这是一个混乱的阅读,但它的工作。不过,我会坚持比尔的方法,因为它更干净。
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"
?>发布于 2010-07-06 19:21:02
我想你可能走错路了。这肯定不是最好的办法。尝试将许多函数分解为更小的实用程序类,然后使用这些函数组合更大的类。
发布于 2010-07-06 19:30:24
发布于 2010-07-06 19:31:10
我认为您应该将建造者模式用于您的SQL,而不是使用由静态方法组成的多个容器。
不,PHP中没有多重继承。而是使用委托。
不,不能包括文件来定义类的方法。您只能在代码正在执行的上下文中(而不是在类定义的中间)中包含文件:
<?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():
<?php
include("SQLSession.php");
include("SQLUser.php");
include("SQLblahblah.php");SQLSession.php:
<?php
function SQLSessionStart()
{
...
}
function SQLSessionEnd()
{
...
}使用此解决方案,您无法访问静态类成员数据,但可以只使用全局变量。
https://stackoverflow.com/questions/3189469
复制相似问题