Ho un'altra domanda molto simile al tema che è stato affrontato....
ho una classe hits che non ha un costruttore , ma ha una funzione increment che dovrebbe incrementare di 1 la proprietà statica $numvolte appena si istanzia l'oggetto volte.
Codice PHP:
class Volte {
protected $ip;
protected static $numvolte = 0; //proprietà non dell'oggetto Volte specifico, ma della classe
public static function increment() { //metodo statico che accede alla prorpietà statica
return self::$numvolte++;
}
public function totalVolte() {
return self::$numvolte;
}
}
Con questo codice (in basso )prima creo l'oggetto $volta e incremento $numvolte tramite il richiamo della funzione increment
e poi poichè stiamo sempre parlando di un metodo static, vado di nuovo ad incrementare la proprietà $numvolte non tramite l'oggetto ,ma con il nome della classe che richiama il metodo static increment.
Codice PHP:
<?php
require_once "Classi/Volte1_membri_statici1.php";
$volta = new Volte(); //creo oggetto $volta
echo $volta::increment();
echo "<br>";
Volte::increment(); //vado di nuovo ad incrementare la proprietà $numvolte.
echo $volta->totalVolte();
il problema è che così messo in uscita vedo 0 e poi 2, invece di 1 e 2. Perchè?
Mi sono dato questa spiegazione: con questa funzione increment
Codice PHP:
return self::$numvolte++;
si ritorna prima il valore di $numvolte e poi si incrementa? perciò io poi vedo prima 0 e poi 2.
Ora però se vado a modificare la funzione increment così
Codice PHP:
public static function increment() { //metodo statico che accede alla prorpietà statica
return self::$numvolte;
self::$numvolte++;
echo "self::$numvolte";
}
perchè voglio vedere 1 e poi 1
vedo 0 e poi 0, perchè???