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;
}
?>