我需要在php中编写一个Player类,它可以使用我不允许更改的函数。我必须以这个函数将返回最大值的方式编写这个类。我只能使用1-10之间的整数。我只在这里复制了有问题的部分:
function CalcPlayerPoints($Player) {
$Points = 0;
foreach($Player as $key => $Value) {
switch ($key) {
case "profyears":
if($Value===true) // this should be true
$Points+=($Value*5); // this should take tha value I give in the class construct
break;
case "gentleman":
if($Value===true)
$Points+=10;
break;
}
}
return $Points; // that should be maximized
}
由于我无法更改===比较,因此我无法初始化profyears属性。如果我用10初始化,那么它不会输入if语句...
public function __construct() {
$this->gentleman = true;
$this->profyears = 10;
}
答案 0 :(得分:0)
此函数允许的唯一选项是profyears是布尔值,所以true或false。别无选择。
因此,班级处理的年份不是几年,而是处理是否有年终。所以__construct中唯一正确的值是true或false。这可能是一个奇怪的命名转换。如果它会命名为:hasProfYears,那将是有意义的。
一些例子:
一位有专业的绅士给出:15分
具有专业的非绅士得5分
没有专业的绅士得10分
没有专业的非绅士会得0分。
答案 1 :(得分:0)
此功能不能像创作者那样工作。 $Value
变量正在被严格地计算为布尔值,但随后它会对其执行数学运算。如果不修改原始功能,就无法解决这个问题。
此外,似乎缺少结束括号。
调用的函数是:
function index()
{
var_dump( $this->CalcPlayerPoints(array( 'profyears' => 10 )) );
}
function CalcPlayerPoints($Player) {
$Points = 0;
foreach($Player as $key => $Value) {
switch ($key) {
case "profyears":
if($Value===true) // this should be true
$Points+=($Value*5); // this should take tha value I give in the class construct
break;
case "gentleman":
if($Value===true)
$Points+=10;
break;
}
}
return $Points; // that should be maximized
}
无论您提供什么整数值,每次都会显示int 0
。如果可以修改原始函数以消除严格的比较,如:
function index()
{
var_dump( $this->CalcPlayerPoints(array( 'profyears' => 10 )) );
}
function CalcPlayerPoints($Player) {
$Points = 0;
foreach($Player as $key => $Value) {
switch ($key) {
case "profyears":
if($Value==true) // this should be true
$Points+=($Value*5); // this should take tha value I give in the class construct
break;
case "gentleman":
if($Value==true)
$Points+=10;
break;
}
}
return $Points; // that should be maximized
}
该函数将返回预期结果:int 50
答案 2 :(得分:0)
似乎CalcPlayerPoints函数有一个错误,因为这样做有意义:
if ($Value === true)
$Points += $Value * 5;
即,“TRUE times 5”并不意味着什么。