@userAgent122

Функция PHP сохранила значение?

Доброго дня! Суть вопроса, есть функция, например:
<?php
function test(){
return rand(1, 5);
}
?>
Если бы вызовем ее в коде в разных местах, то всегда будет разное значение. Возможно ли как то сделать чтобы она сохранило свое значение при пером вызове, и на всех последующих выдавало его? Да, да я знаю что можно сделать так:
$t = test();
Но этот вариант не подходид.
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
l3ftoverz
@l3ftoverz Куратор тега PHP
Люблю Финский металкор
Статическая переменная. Но это не очень логично для функции подобного плана, проще и правда куда-то записать результат функции, нежели, чтобы она сама его хранила.

Тривиально будет выглядеть так:
<?php
function getMeRandInteger ($min, $max) {
    static $savedValue;
    $savedValue = $savedValue ?: rand($min, $max);
    
    return $savedValue;
}


var_dump(getMeRandInteger(1, 10));
var_dump(getMeRandInteger(1, 10));
var_dump(getMeRandInteger(1, 10));
var_dump(getMeRandInteger(1, 10));
var_dump(getMeRandInteger(1, 10));
var_dump(getMeRandInteger(1, 10));
var_dump(getMeRandInteger(1, 10));


Но даже, если изменить аргументы и если функция ранее вызывалась - значение вернётся старое, придётся писать лишнюю функцию, но это беcсмысленно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
<?php
function test(){
    if (empty($GLOBALS['my_special_test_value'])) $GLOBALS['my_special_test_value'] = rand(1, 5);
    return $GLOBALS['my_special_test_value'];
}
?>
Ответ написан
mahmudchon
@mahmudchon
$t2 = test();
Ответ написан
@sidni
Php Developer
Это вам не "...мыслить агрегатами..."))))))))))))))))))))))))))
function test() {
    static $res = null;
    if ($res === null) {
        $res = rand(1, 5);
    }
    return $res;
}

вообще-тo так не делают...
Ответ написан
@IS-Builder
userAgent122 ещё можно
так
$std = function()use(&$rand): stdClass
{
    return (object) ['rand' => $rand ?? $rand = rand(1, 5)];
};

var_dump( $std()->rand );
var_dump( $std()->rand );

Или вовсе
так
$std = (object) ['rand' => rand(1, 5)];
var_dump( $std->rand );
var_dump( $std->rand );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы