【发布时间】:2014-09-01 20:55:21
【问题描述】:
我写了几个类,使用时都需要实例化。
我的目标是在尝试创建实例化类之间的动态访问时能够拥有完美的组织。
在一个类中,它会根据它刚刚所做的事情调用几个方法。这些方法之一将是来自其他类的方法。 (目前是静态方法)我会编辑这些行来控制类之间的行为。
我所说的动态是指,如果其中一个静态方法不可用或稍后可用,那么它只是执行不同的方法来在内部完成任务。
我的问题 是适当的 OOP 关注的问题。我不确定是否有更好的方法,或者我所做的是否会导致问题。虽然,它工作得很好。
我在下面准备了一个示例。其中,是表象,不是实际情况。 executionFileOne 是一种情况,ExecutingFileTwo 是另一种情况。
执行FileOne.php
require_once 'login.php';
$login = new Login();
require_once 'serverData.php';
$servDat = new serverData();
//blah blah blah
执行FileTwo.php
require_once 'serverData.php';
$servDat = new serverData();
//blah blah blah
登录.php
class Login {
private static $thisClass = null;
public function __construct(){
//Get and set user data.
self::setStaticClass($this);
}
public static function setStaticClass(&$inputClass){
self::$thisClass = $inputClass;
}
//Methods Methods Methods
//---Methods Executed by class at specific times---------------
// - - - Used to get input from other classes
//Methods Methods Methods
//-------------------------------------------------------------
//---Methods for other classes.--------------------------------
// - - - Used to output data to other classes
public static function getUserID(){
die('Test'.self::$thisClass->userID);
}
//Methods Methods Methods of other classes.
//-------------------------------------------------------------
}
服务器数据.php
class serverData {
private static $thisClass = null;
public function __construct(){
//work work work
//an IF statement detected needing to register userID on serverData
$this->registerOnServer();
//work work work
self::setStaticClass($this);
}
//Methods Methods Methods
public function registerOnServer(){
//work work work
$this->userID = $this->getUserID();
//add userID to registration data.
}
//---Methods Executed by class at specific times---------------
// - - - Used to get input from other classes
private function getUserID(){
if (class_exists('Login')) {
return Login::getUserID();
} else {
return 0;
}
}
//-------------------------------------------------------------
//---Methods for other classes.--------------------------------
// - - - Used to output data to other classes
//Methods Methods Methods of other classes.
//-------------------------------------------------------------
}
【问题讨论】:
-
我不熟悉那个替代方案。
-
我查了一下,但我的一个问题是,在特定情况下,并不是一直调用一个类。为了让它工作,我必须编辑数百页才能让它工作。如果我改变它,它会要求我编辑那一百个文件......我想。以 serverData 类需要 Login 类为例,但 Login 类并不总是可用的。
-
啊,修复旧代码可能是一个挑战。这就是我从一开始就使用 DI/IoC 开始所有新项目的原因。无论如何,一个好的 IoC 容器也将支持 可选依赖项,或者可以使用 mock 依赖项(它满足 DI 要求,但实际上并没有“做”任何事情如果使用)- 重要的是提供了相同的接口(并且服务在上下文中按预期运行)。
-
你能提供一个你描述的例子吗?我很难理解这种设计模式。
-
我已经进一步澄清以表示它们是如何被调用的。另外,我仍然无法在这里建立联系。这种设计模式对我来说太离谱了。我希望给出一个由我制作的示例代码组成的示例,这将有助于我准确地了解您在说什么。
标签: php class oop reference static