【发布时间】:2018-08-16 10:39:11
【问题描述】:
我从事的项目是由其他开发人员启动的。该项目有一个帮助类,它将接受输入并从一些异地注册表中获取数据。
这个类很简单,它唯一要做的就是获取数据。 我的老板让我使用这个帮助类来创建另一个接口。
所以我做到了。我得到了这个类,围绕它构建了我的界面并处理了结果。只要我给出单个输入,一切都可以,例如“用户”。当我将辅助函数放入一个循环中时,一切都会崩溃。
我必须通知你,帮助类中的函数是一个静态函数,它对某些注册表有一个循环。每个注册表的返回通过注册表函数写入一个通用静态变量。每次调用注册表后,静态变量都会返回到接口。
结果是在循环的某些迭代中我得到了错误的数据,更具体地说,我得到了前一个用户的数据。
如果每次迭代我都将静态变量预设为“[]”,那么一切都按预期工作。
例如:
class Helper {
private static $results = [];
public static askRegistries ($userId) {
$registries = ['registry1','registry2','registry3'];
foreach($registries as $registry) {
self::callRegistry($userId, $registry);
}
return self::$results;
}
private static callRegistry($userId, $registry) {
self::$results[] = getData($userId)
}
}
通过上面的例子,我试图向你解释如何将数据设置为静态变量并返回到接口。
问题 #1
这个静态函数每次调用静态变量是否正常 保留旧数据?
问题 #2
如果正常,能解释一下原因吗?
问题 #3
再次如果正常,解决此问题的正确方法是什么 无需对代码进行任何重大更改,因为它被禁止 我的老板?
编辑#1
问题 #4 如果我将对静态方法 callRegistry 的调用更改为附加到静态变量的注册表类,还有什么我应该记住的吗?
例如
class Helper {
public static $results = [];
public static askRegistries ($userId) {
$registries = ['Registry1','Registry2','Registry3'];
foreach($registries as $registry) {
$registryClass = new {$registry}();
$registryClass->query($userId);
}
return self::$results;
}
}
class Registry1{
public query($userId) {
Helper::results = doSomething();
}
}
在本例中,静态变量是公共的。
【问题讨论】:
-
我认为这是正常行为,因为静态变量是保持状态的手段。 electrictoolbox.com/php-static-variables
-
谁是
getData,为什么在callRegistry中还需要registry? -
@Edwin 这是一个示例,展示了用于将数据从帮助程序类返回到接口的逻辑。它所写的任何东西都没有真正的意义。
-
@hanishsingla 我会看看你给我的链接,因为我必须向我的主管报告这个问题。
-
一个接口不能保存任何数据,什么意思?
标签: php static static-methods