在我的PHP(5.4.19)应用程序中,我将字符串值分配给两个不同的数组。一个数组作用于方法,另一个数组是类属性:
class AnyClass{
public $foo = array();
public function anyMethod(){
$bar = array();
$bar[] = 'anyTextA';
$this->foo[] = 'anyTextB';
return array( $bar, $this->foo );
}
}
这是anyMethod()返回的内容:
Array
(
[0] => Array
(
[0] => anyTextA
)
[1] => Array
(
[0] => anyTextB
[1] => anyTextB
)
)
为什么只有一个作业发生时,第二个数组中出现了两个元素?
答案 0 :(得分:4)
您必须多次调用此方法。
$this->foo[] = 'anyTextB';
此语句adds
再向$this->foo
输入一个条目,而另一个语句$bar = array();
每次都创建一个新数组。因此,如果您运行此方法两次,您将获得$foo
的两个值,但$bar
仍然有一个值。
正如我在第一条评论中所说,如果您向我们展示如何创建该类的实例,我们将能够更准确地告诉您在哪里复制该呼叫。
与其他地方的建议相反, 不 使用$this->foo=array();
。调试你的问题并解决问题所在,而不是仅仅提出一个临时修复来隐藏错误并在其上构建更多代码。
答案 1 :(得分:1)
您正在调用该方法两次。
这可能是因为您在尝试回显结果时在AND之前调用该方法。
但也可能是因为您在IDE中工作,例如,IDE在监视列表中设置了方法。
答案 2 :(得分:1)
您可以两次致电anyMethod()
。
尝试在数组foo
中添加索引。
例如:$this->foo[1] = 'anyTextB';
问题不应再发生了。
答案 3 :(得分:1)
$foo
数组中的分配数量取决于anyMethod()
执行的次数
即。如果anyMethod()
被执行一次,它将只包含一个值,如果anyMethod()
被执行5次,它将包含5个值
由于$foo
数组的作用域位于anyMethod()
之外,因此每次执行anyMethod()
函数时都会将值添加到其中
但是对于$bar
数组,它的范围在anyMethod()
内。每次$bar
执行
anyMethod()
初始化为新数组
如果你想避免这个问题
在$foo = array();
anyMethod()
答案 4 :(得分:0)
试试这样......你会得到你期望得到的东西。
$var = new AnyClass;
var_dump($var->anyMethod());
输出:
array(2) {
[0]=>
array(1) {
[0]=>
string(8) "anyTextA"
}
[1]=>
array(1) {
[0]=>
string(8) "anyTextB"
}
}