我目前正在开发一个包含大量数据库用法的PHP项目。基础是:我有一个遵循Factory模式的PDOFactory
类和一个带有静态方法的抽象SQL
类(只是这些方法的容器),后者又与PDOFactory
对话
正如我所说,该项目涉及广泛的数据库使用,因此SQL
类将包含许多方法。但是,它们可以很容易地分组,这取决于它们处理的内容(即会话存储,用户登录/关闭等)。这将使SQL类更容易维护等等。这里有一个很大的问题:我可以将类内容的来源分布在多个文件中吗?这个问题可能有(至少)两种可能的解决方案:
SQLSession
,SQLUser
,SQLblahblah
并使SQL
类继承所有类。#include SQLSession.php;
或类似的东西。我知道PHP中存在 no 多重继承,因此排除了第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"
?>
答案 0 :(得分:2)
我认为你可能正在接近这个错误。这当然不是最好的方式。尝试将许多函数分解为更小的实用程序类,然后使用它们来组合更大的类。
答案 1 :(得分:1)
答案 2 :(得分:1)
我认为你应该使用Builder pattern作为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()
{
...
}
您无法使用此解决方案访问静态类成员数据,但您只能使用全局变量。
答案 3 :(得分:0)