Мы могли бы сделать следующее:
random_number_generator <- function(n, distribution, mean = NULL, sd = NULL, lambda = NULL, size = NULL, prob = NULL) {
if (distribution == "Normal")
x <- rnorm(n = n, mean = mean, sd = sd)
else if (distribution == "Poisson")
x <- rpois(n = n, lambda = lambda)
else if (distribution == "Binomial")
x <- rbinom(n = n, size = size, prob = prob)
out <- list(x = x, distribution = distribution, size = size, prob = prob)
class(out) <- "MyClass"
out
}
summary.MyClass <- function(obj) {
stopifnot(inherits(obj, "MyClass"))
cat("\t\n",
sprintf("Sample size: %s\n", length(obj$x)),
sprintf("Mean: %s\n", mean(obj$x)),
sprintf("Standard Deviation: %s\n", sd(obj$x)),
sprintf("Distribution: %s\n", obj$distribution),
sprintf("Size: %d\n", obj$size),
sprintf("Probability: %s\n", obj$prob)
)
}
answer <- random_number_generator(n = 10, distribution = "Binomial", size = 15, prob = 0.4)
summary(answer)
#
# Sample size: 10
# Mean: 5.5
# Standard Deviation: 1.64991582276861
# Distribution: Binomial
# Size: 15
# Probability: 0.4
Итак, чтобы вернуть дополнительную информацию, нам нужно сохранить эту дополнительную информацию в качестве выходной информации из random_number_generator
, что я сделал с
out <- list(x = x, distribution = distribution, size = size, prob = prob)
class(out) <- "MyClass"
Если бы страница была обновлена затем, то Вы ожидали бы, что два запроса друг после друга будут для того же URL (путь, имя файла, строка запроса), и то же содержание формы (если таковые имеются) (данные POST). Это могло быть довольно большим количеством данных, таким образом, может быть лучше хешировать его. Так...
<?php
session_start();
//The second parameter on print_r returns the result to a variable rather than displaying it
$RequestSignature = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true));
if ($_SESSION['LastRequest'] == $RequestSignature)
{
echo 'This is a refresh.';
}
else
{
echo 'This is a new request.';
$_SESSION['LastRequest'] = $RequestSignature;
}
В ситуации с Ajax необходимо было бы быть осторожными, о которых файлах Вы помещаете этот код в то, чтобы не обновить подпись LastRequest для сценариев, которые назвали асинхронно.
<?php
session_start();
if (!isset($_SESSION["visits"]))
$_SESSION["visits"] = 0;
$_SESSION["visits"] = $_SESSION["visits"] + 1;
if ($_SESSION["visits"] > 1)
{
echo "You hit the refresh button!";
}
else
{
echo "This is my site";
}
// To clear out the visits session var:
// unset($_SESSION["visits"]);
?>
Если Вы подразумеваете, что хотите различать то, когда пользователь сначала достигает страницы от того, когда они перезагружают проверку страницы ссылающийся домен. В php это: $ _SERVER ["HTTP_REFERER"]. Посмотрите, равно ли это страница, Ваш сценарий работает. Может иметь место, что клиент не предоставляет эту информацию, если это происходит, Вы могли бы установить cookie или переменную сеанса для отслеживания, какова последняя требуемая страница была.
Если кто-то обновит страницу, то тот же запрос будет отправлен как предыдущий. Таким образом, необходимо проверить, совпадает ли текущий запрос с последним. Это может быть сделано следующим образом:
session_start();
$pageRefreshed = false;
if (isset($_SESSION['LAST_REQUEST']) && $_SERVER['REQUEST_URI'] === $_SESSION['LAST_REQUEST']['REQUEST_URI']) {
if (isset($_SERVER['HTTP_REFERER'])) {
// check if the last request’s referrer is the same as the current
$pageRefreshed = $_SERVER['HTTP_REFERER'] === $_SESSION['LAST_REQUEST']['HTTP_REFERER'];
} else {
// check if the last request didn’t have a referrer either
$pageRefreshed = $_SERVER['HTTP_REFERER'] === null;
}
}
// set current request as "last request"
$_SERVER['LAST_REQUEST'] = array(
'REQUEST_URI' => $_SERVER['REQUEST_URI'],
'HTTP_REFERER' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null
);
Я не протестировал его, но это должно работать.