Правила разрешения имен говорят, что поиск имени останавливается в первой области, в которой найдено совпадающее имя. В этот момент правила разрешения перегрузки срабатывают, чтобы найти наилучшее соответствие доступных функций.
В этом случае gogo (int *)
находится (в одиночку) в Derived класс, и поскольку стандартное преобразование из int в int * не выполняется, поиск не выполняется.
Решение состоит в том, чтобы принести объявления Base с помощью объявления using в классе Derived:
с использованием Base :: gogo;
... позволит правилам поиска имен найти всех кандидатов и, следовательно, разрешение перегрузки будет продолжаться, как вы ожидали.
Сохраните переменные в сеансе PHP.
session_start();
$_SESSION['images'] = $images;
Затем на следующей (или любой другой) странице вы можете получить значения как:
session_start();
$images = $_SESSION['images'];
Изменение области видимости переменных в большей области, может сделать трюк. Кроме того, проверьте, есть ли у вас запрос на отправку перед обновлением значений.
<?php
if(sizeof($_POST) >0)
{
//UPDATE VALUES
}
?>
Решение, которое вы ищете, - это сеанс. Используйте $_SESSION
для хранения значений ваших переменных. Например, в конце скрипта:
$_SESSION['images'] = $images;
и на входе формы:
<input name='i".$x."' type='text' value='".(isset($_SESSION['images']) ?
$_SESSION['images'] : '')."'>
Если вы хотите сохранить постоянное хранилище, между различными страницами , вы должны использовать сеансы, поставив session_start();
в начало вашего скрипта. После этого каждая переменная $ _SESSION [$ x] будет сохранена и будет доступна для ваших скриптов.
Однако в этом конкретном случае, отвечая на ваш вопрос: «Есть ли способ сохранить значения из массива, чтобы форма всегда была заполнена последними сохраненными значениями? », проще просто использовать переменную $ _POST, если она уже существует:
<?php
if(!$_POST){
$_POST = array();
foreach(array("i0","i1","i2","i3") as $i) $_POST[$i]="";
foreach(array("u0","u1","u2","u3") as $i) $_POST[$i]="";
foreach(array("t0","t1","t2","t3") as $i) $_POST[$i]="";
}
foreach($_POST as $k=>$v) filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS);
//save the arrays with the form data
$images = array($_POST["i0"], $_POST["i1"], $_POST["i2"], $_POST["i3"]);
$urls = array($_POST["u0"], $_POST["u1"], $_POST["u2"], $_POST["u3"]);
$titles = array($_POST["t0"], $_POST["t1"], $_POST["t2"], $_POST["t3"]);
//print the arrays
print_r($images);
print_r($urls);
print_r($titles);
//create the form and populate it
echo "<p><form method='post' action='".$_SERVER['PHP_SELF']."';";
$x = 0;
while ($x <= 3) {
echo"<div>
<input name='i".$x."' type='text' value='".$images[$x]."'>
<input name='u".$x."' type='text' value='".$urls[$x]."'>
<input name='t".$x."' type='text' value='".$titles[$x]."'>";
$x++;
}
?>
<br>
<input type="submit" name="sumbit" value="Save"><br>
</form>
Примечание: эта строка foreach($_POST as $k=>$v) filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS);
должно быть достаточно, чтобы защитить вас от основных атак XSS. Обратите также внимание на то, что в целом лучше следовать шаблону перезагрузки страниц с помощью GET после POST , что делает вас менее восприимчивыми к формированию повторных представлений, и в этом случае использование сессий для хранения является лучшим решением.
Что привело меня сюда, было несколько другое зверь. У меня возникла проблема с последующим отправкой запроса с IP-камеры AXIS и необходимость сохранения последнего имени файла в запросах. В случае, если кто-то споткнется здесь и ищет способ кэшировать переменные, а SESSION - это не вариант, возможно, стоит посмотреть на альтернативный кэш PHP:
Примечание: в отличие от многих других механизмов в PHP переменные, хранящиеся с помощью apc_store () будет сохраняться между запросами (пока значение не будет удалено из кеша).
Использовать сеансы: http://php.net/manual/en/function.session-start.php
Вы можете использовать сеансы для хранения значений и писать правила, чтобы пополнить поля формы после проверки на отправке данных. Также функция isset () очень полезна, чтобы избежать «неопределенных» ошибок.
//print the arrays
моего кода? – Bogdan 1 November 2011 в 12:38session_start();$_SESSION['images'] = $images;
после шага://save the arrays with the form data
И затем я добавилsession_start();$images = $_SESSION['images'];
до//create the form and populate it
– Bogdan 1 November 2011 в 16:12$name = "Vikk"; session_start(); $_SESSION['name'] = $name; echo $_SESSION['name'];
Он напечатаетVikk
– Vikk 1 November 2011 в 16:42$_SESSION['name']
хранить массив? и если да, то какой синтаксис? это как$_SESSION['name'][0]
и т. д.? – Bogdan 1 November 2011 в 22:36