PDA

View Full Version : [PHP] Return da metodo costruttore.


biowep
09-02-2013, 15:56
Ciao, vorrei fare in modo che un metodo costruttore di una classe PHP mi permetta di ritornare un valore.
class Test {
public function __construct(){
return false;
}
}
$var = new Test();
if($var===false) echo "si";
else echo "no";
//risultato: no
Quando inserisco un return nel __construct è come se lo ignorasse (se non per il fatto che interrompe l'esecuzione dello della funzione nel punto in cui viene inserito).
Esiste un modo per ritornare un valore e nello stesso tempo far puntare la variabile all'istanza create (un po come avviene in Javascript: var a=new String("ciao");)?

Oppure, esiste un modo di impedire la creazione dell'istanza e restituire un puntatore con valore null al verificarsi di certe condizioni?

idoido
09-02-2013, 16:54
la butto li: classi statiche?

http://stackoverflow.com/questions/468642/is-it-possible-to-create-static-classes-in-php-like-in-c

biowep
09-02-2013, 16:59
Devo creare varie istanze quindi non è possibile.

HoldenCaulfield1987
10-02-2013, 11:35
Beh ti ignora il return per il semplice fatto che un costruttore torna il puntatore (fa strano sentirselo dire in php) dell'istanza dell'oggetto che è stato creato.
Non conosco molto php, ma credo che se davvero si verificasse un errore duranta l'istanza verrebbe sollevata automaticamente una eccezione (magari qualcosa del tipo memoria terminata).

Se invece TU vuoi impedire la creazione di un oggetto credo che l'unica possibilità sia di sollevare una eccezione.
Ad esempio:

class Test
{
public function __construct(nome)
{
if ($nome == null)
throw new NullPointerException();
}
}

Non tocco php da tanto e non ho mai lavorato con gli oggetti con questo linguaggio, quindi il codice potrebbe non essere corretto.
In ogni caso dovrebbe essere chiaro il codice.

biowep
10-02-2013, 17:37
Avevo già risolto grazie alla segnalazione di idoido, ma penso che creerò un'eccezione così posso informare anche sul tipo di errore verificatosi. Riporto il codice nel caso fosse utile.
Grazie delle risposte

class Test {
public $value;
private function __construct(){
$this->value = 5;
}
static function construct($condition){
if($condition){
return new Test();
}else{
return null;
}
}
}
$var = Test::construct(true);
echo gettype($var);
$var = Test::construct(false);
echo ' '.gettype($var);
//risultato: object NULL