PHP中的严格比较

时间:2012-01-30 17:55:24

标签: php comparison integer boolean strict

我需要在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;  
}

3 个答案:

答案 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”并不意味着什么。