Optimierung der Wiederholung schwerer Operationen in PHP
Im vorherigen Unterricht nehmen die wiederholten Funktionsaufrufe tatsächlich sehr wenig Zeit in Anspruch und unsere Optimierung würde nicht sehr viel einsparen. Allerdings wird alles viel schlimmer, wenn wir mehrere Male eine "schwere" Funktion aufrufen, die relativ lange Ausführungszeit benötigt.
Nehmen wir zum Beispiel an, wir haben eine Funktion, die die Teiler einer Zahl findet:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Offensichtlich ist diese Funktion recht "schwer". Daher wäre es eine schlechte Idee, einen Code wie diesen zu schreiben:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Besser ist es natürlich, die "schwere" Operation einmal auszuführen, das Ergebnis in einer Variable zu speichern und dann diese Variable an den benötigten Stellen zu verwenden:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimieren Sie den untenstehenden Code:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'верно';
} else {
echo 'неверно';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>