El ejemplo funciona cuando tiene la directiva de configuración (php.ini) register_globals en on. Ahora, es mejor que trabajes como si supieras que no existiera eso y que siempre está en off.
Código :
<html>
<head>
<title>Persistencia</title>
</head>
<body>
<h1>Demo de persistencia</h1>
<form method="post">
<?php
$txtBoxCounter++;
$hdnCounter++;
print <<<HERE
<input type = "text"
name = "txtBoxCounter"
value = "$txtBoxCounter">
<input type = "hidden"
name = "hdnCounter"
value = "$hdnCounter">
<h3>el valor escondido es $hdnCounter</h3>
<input type = "submit"
value = "Click para aumentar contadores">
HERE;
?>
</form>
</body>
</html>
Corregido, para cualquier configuración:
Código :
<html>
<head>
<title>Persistencia</title>
</head>
<body>
<h1>Demo de persistencia</h1>
<form method="post">
<?php
$txtBoxCounter = $_POST["txtBoxCounter"];
$hdnCounter = $_POST["$hdnCounter"];
$txtBoxCounter++;
$hdnCounter++;
print <<<HERE
<input type = "text"
name = "txtBoxCounter"
value = "$txtBoxCounter">
<input type = "hidden"
name = "hdnCounter"
value = "$hdnCounter">
<h3>el valor escondido es $hdnCounter</h3>
<input type = "submit"
value = "Click para aumentar contadores">
HERE;
?>
</form>
</body>
</html>
Por otro lado, no se a que te refieres con "persistente". Simplemente las variables de $_GET, $_POST, y similares son variables superglobales, que pueden ser accedidas y modificadas en cualquier punto de tu script. Por lo que si la cambias en un punto, en el próximo punto que lo accedes tendrás el cambio.
Ahora el concepto de "superglobales" es algo muy de php, es similar a lo que conoces globales en otros lenguajes solo que, el interprete lo declara por defecto y estas son: $_GET, $_POST, $_FILES, $_SERVER, $_SESSION, $_COOKIES. En contraste, también existen las variables globales en php que siguen el mismo concepto que tienes de otros lenguajes, simplemente son declaradas por el mismo programador y se usa algo así:
script.php
Código :
<?php
$someVariable = "mivariable";
function myFunction()
{
global $someVariable; // sin el global, someVariable no se define;
echo $someVariable;
}
?>
saludos