虽然我知道如何在程序PHP
中解决这个问题,但我对OOP有困难。一些代码行缩短了(例如html)。
因此,用户输入一个数字,$ army1在创建自己时传递给构造函数。我的构造函数使用for循环($ filled_army)填充数组,但我不知道如何以正确的方式检索它(因此我可以将其打印出来),因为构造函数没有返回值?
在构造函数中添加print_r($filled_army);
将打印出值,仅举几例。
另外,如果不能通过__construct解决这个问题,有人可以帮助我通过我自己的课程方法来解决这个问题吗?我猜它应该用吸气剂和放大器完成。 setters,但我也有使用它们的问题,因为一个变量在index.php中传递,而其他变量($ filled_army)是类的属性...
的index.php
<form>
<input type="number" name="size">
</form>
<?php
$army1 = new Army($_GET['size']);
// $army1->getArmy(); ??
?>
army.class.php
<?php
class Army {
public $filled_army = [];
public size;
//...
public function __construct($size){
$this->size = $size;
$arrayOfSoldiers = [10,20,30];
for($i=0; $i<$size; $i++)
{
$filled_army[$i] = $arrayOfSoldiers[mt_rand(0, count($arrayOfSoldiers) - 1)];
}
}
}
?>
答案 0 :(得分:0)
由于您已将$filled_army
属性声明为public
,因此在使用PHP中的标准对象表示法进行实例化后,它将立即可用,例如:
$army1 = new Army($_GET['size']);
$army1->filled_army; // Now contains your array;
但是,将属性的可见性设置为public
意味着任何代码都可以修改属性,而不仅仅是它创建的对象。通常,要解决此问题,我们将属性设置为protected
或private
,然后使用getter / setter:
class Army
{
private $filled_army = [];
private $army_size = 0;
private static $_soldiers = [ 10, 20, 30 ];
function __construct($size)
{
$this->army_size = $size;
for($i = 0; $i < $size; $i++)
{
$this->filled_army[] = self::$_soldiers[ mt_rand(0, count(self::$_soldiers) - 1) ];
}
}
// Getter for the army:
public function getArmy()
{
return $this->filled_army;
}
// Getter for the size:
public function getArmySize()
{
return $this->army_size;
}
}
现在,我们可以访问getArmy()
方法(或类似getArmySize()
方法):
$army1 = new Army($_GET['size']);
$army1->getArmy(); // Returns the army
$army1->getArmySize(); // Returns the value of $_GET['size'];
值得注意的是,PHP支持Magic Getters/Setters,这可能对您的项目有用。
另请注意,我们不需要构造函数的可见性修饰符(PHP中的__construct()
始终公开可见)。