Оптимизација на повторување на тешки операции во PHP
Во претходната лекција, повторните повикувања на функции всушност заземаат многу малку време и нашата оптимизација нема да заштеди многу. Сепак, сè ќе биде многу полошо ако неколку пати ја повикаме "тешката" функција, која се извршува прилично долго време.
Нека, на пример, имаме функција која ги наоѓа делителите на бројот:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Очигледно е дека оваа функција е прилично "тешка". Затоа лоша идеја е да се напише ваков код:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Подобро е, се разбира, "тешката" операција да се изврши само еднаш и резултатот да се запише во променлива, а потоа да се користи таа променлива на потребните места:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Оптимизирајте го кодот прикажан подолу:
<?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;
}
?>