PHP: Getter 和 Setter 在使用数组时?

PHP: Getter and Setter while using Arrays?

我对 php 非常陌生,所以如果您认为我的代码一团糟,请原谅我的代码,但我已经花了好几个小时来解决这个问题。

我正在尝试使用 getter 和 setter 方法从 class 中提取功能,然后使用数组创建基于 class 的新对象。 $_GET 是从 HTML 形式获取输入 foodNumber ,该形式确定选择数组中的哪个位置。所以如果在表格中输入0,则表示Salad,如果在表格中输入2,则应表示Vegetables.

所以在我看来,$foodObject 正在从 class FoodArray 创建一个新对象。我试图让对象在一个数组中,所以在这种情况下 $foodArray。但是我不知道如何使用 getter setter 方法使用 class 函数通过数组输入值或如何调用它们。 提前致谢!

 <?php

class FoodArray {

private $foodValue;

public function setFoodValue($x){
$this->foodValue=$x;
}

public function getFoodValue(){
return $this->foodValue;
}
}


$foodNumber = $_GET['foodNumber']; 

$foodObject = new FoodArray;

 $foodArray = array ("Salad", "Vegetables", "Pasta", "Pizza", "Burgers");
 $foodArray=$foodObject->getFoodValue();

 echo "The number you chose is ". $foodNumber;
 echo "The food item you choose is".$foodArray[$foodNumber]; 

?>

/////HTML 表格/////

<html>
<body>

<form action="class_with_getter_and_setter.php" method="get">
<b>Choose a number between 0-4 and get a mystery food!</b>
<input type="text" name="foodNumber">

<input type="submit">

</form>

</body>
</html>

如果问题是 echo "The food item you choose is".$foodArray[$foodnumber]; 没有产生您期望的结果,则有两个潜在问题:

  1. 我不清楚你 $foodObject 的意图。但是,$foodArray=$foodObject->getFoodValue(); 可能会把它搞砸,除非内部 $foodValue 属性 是(像)你用沙拉、蔬菜等声明的 $foodArray
  2. 当回显 $foodArray[$foodnumber] 时,数字中的 'n' 是小写的,上面你设置了 $foodNumber(大写 'N')

我不确定您的最终意图是什么,但我可以尝试指出您出错的几个地方:

  • 从未调用 FoodArray 对象的 setFoodValue() 方法,因此 $foodValue 没有值
  • $foodArray 被设置为一个数组,但当您调用行 $foodObject->getFoodValue()
  • 时立即被覆盖
  • $foodObject->getFoodValue() 实际上 returns 没什么,因为 $foodValue 从未设置过

如果您要传递数组或字符串,您的 getter 和 setter 应该没有区别,您可以通过相同的方式传递和检索它们。

再次不确定你想要完成什么,但你可以尝试这样的事情:

$foodObject = new FoodArray;

$foodArray = array ("Salad", "Vegetables", "Pasta", "Pizza", "Burgers");
$foodObject->setFoodValue($foodArray);

$foodObjectArray = $foodObject->getFoodValue();

echo "The number you chose is ". $foodNumber;
echo "The food item you choose is".$foodObjectArray[$foodNumber];