我在php中有以下函数:
function addEntryHere($day, $numberId, $numberOfTexts, $entries) {
foreach($entries as $entry) {
if($entry->$day == $day) {
$entry->addToEntry($numberId, $numberOfTexts);
}
}
$newEntry = new Entry($day);
$newEntry->addToEntry($standId, $numberOfTexts);
array_push($entries, $newEntry);
//print_r($entries);
}
当我在循环中调用这个函数时:
while($row = mysqli_fetch_array($result)) {
echo "count table before: " . count($entries);
for($i=23; $i<26; $i++) {
addEntryHere($i, $row[1], $row[2], $entries);
//print_r($entries);
}
echo "count table after: " . count($entries);
}
我只看到:
count table before: 0
count table after: 0
我的addToEntry
方法很简单:
function addToEntry($numberId, $numberOfTexts) {
switch($numberId) {
case 1: $this->number1+= $numberOfTexts; break;
case 2: $this->number2+= $numberOfTexts; break;
}
}
那么,为什么我总是得到输出0,即使$result
中有一些数据?我决定将数组$entries
传递给addEntryHere
方法,因为我无法在方法中引用它,尽管我认为它具有全局作用域。。。
======编辑
在遵循观察者的建议后,我修改了我的代码,但这一行:
if($entry->$day == $day) {
给我一个错误:
Notice: Undefined property: Entry::$23
浏览器会多次打印这样的错误(因为它在while循环中)。这里可能有什么问题?
您只是在修改函数内部的局部变量。每次调用函数后,该局部变量都会消失并丢失。您想要做的是将计算值返回到调用上下文,以便稍后使用:
array_push($entries, $newEntry);
return $entries;
}
电话:
while($row = mysqli_fetch_array($result)) {
echo "count table before: " . count($entries);
for($i=23; $i<26; $i++) {
$entries = addEntryHere($i, $row[1], $row[2], $entries);
//print_r($entries);
}
echo "count table after: " . count($entries);
}
如果您试图使用全局作用域,请注意,在PHP中,您必须在函数内部显式导入全局作用域:
function addEntryHere($day, $numberId, $numberOfTexts) {
global $entries;
但要意识到,一般来说,处理全局变量是一种反模式,建议不要这样做。