/ / Strict Vergleich in PHP - PHP, Vergleich, Ganzzahl, boolean, streng

Strict Vergleich in PHP - PHP, Vergleich, Ganzzahl, Boolean, streng

Ich muss eine Player-Klasse in PHP schreiben, die funktioniertmit einer Funktion, die ich nicht ändern darf. Ich muss diese Klasse so schreiben, dass diese Funktion den Maximalwert zurückgibt. Ich kann nur ganze Zahlen zwischen 1-10 verwenden. Ich habe hier nur den problematischen Teil kopiert:

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
}

Da ich den Vergleich nicht ändern kann, kann ich das Attribut profyears nicht initialisieren. Wenn ich mit 10 initialisiere, dann gibt es keine if-Anweisung ein ...

public function __construct() {
$this->gentleman = true;
$this->profyears = 10;
}

Antworten:

0 für die Antwort № 1

Die einzige Option, die diese Funktion erlaubt, ist, dass profyears ein boolescher Wert ist, also wahr oder falsch. Keine andere Möglichkeit möglich.

Also behandelt die Klasse profyears nicht als Betragvon Jahren, aber als ob es Profyears oder nicht gibt. Der einzige korrekte Wert in dir __construct ist also wahr oder falsch. Dies könnte eine seltsame Namenskonvertierung sein. Es würde Sinn machen, wenn es zB hasProfYears heißen würde.

einige Beispiele:
Ein Gentleman mit Profyears gibt: 15 Punkte.
Ein Nicht-Gentleman mit Profyears gibt 5 Punkte.
Ein Gentleman ohne Profyears gibt 10 Punkte.
Ein Nicht-Gentleman ohne Profil gibt 0 Punkte.


0 für die Antwort № 2

Es scheint, dass die CalcPlayerPoints-Funktion einen Fehler hat, da es Sinn macht, dies zu tun:

if ($Value === true)
$Points += $Value * 5;

Das heißt, "WAHR mal 5" bedeutet nichts.


0 für die Antwort № 3

Diese Funktion funktioniert nicht so, wie der Schöpfer es beabsichtigt hat. Das $Value Die Variable wird als streng boolesch ausgewertet, aber dann werden mathematische Operationen durchgeführt. Es gibt keine Möglichkeit, dieses Problem zu lösen, ohne die ursprüngliche Funktion zu ändern.

Außerdem scheint es eine fehlende schließende Klammer zu geben.

Die aufgerufene Funktion lautet:

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
}

wird angezeigt int 0 jedes Mal, egal welchen Integer-Wert Sie liefern. Wenn die ursprüngliche Funktion geändert werden kann, um den strikten Vergleich zu eliminieren:

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
}

Die Funktion würde die erwarteten Ergebnisse liefern: int 50