Pagina 1 di 1

php class: abort __construct()

Inviato: mar 16 feb 2010, 16:57
da ZeroUno
mi ritrovo con una situazione del genere.

Codice: Seleziona tutto

class a {
  public function __construct($x){
    if($x==1)
      {echo "ok"; $this->initiliaze();}
    else
      {echo "inizializzazione impossibile";}
  }
  private initilize(){
    ... inizializzazione ...
  }
}
$test1=new a(1);
$test2=new a(2);
nel primo caso viene costruita una classe e viene inizializzata.
nel secondo caso la classe non viene inizializzata, tuttavia $test2 è comunque un oggetto di tipo a utilizzabile.
Mi piacerebbe che new a(2) possa ritornare false o simile, mentre new a(1) che ritorni un oggetto valido.

si può?

return false nel constructor viene ignorato completamente
unset ($self) pure viene ignorato.

Insomma... un oggetto può distruggere se stesso in qualche modo?

finora me la sono cavata così, ma non mi piace:

Codice: Seleziona tutto

class a {
  public ok=false;
  public function __construct($x){
    if($x==1)
      {echo "ok"; $this->initiliaze();}
    else
      {echo "inizializzazione impossibile";}
  }
  private initilize(){
    ... inizializzazione ...
    $this->ok=true;
  }
  static public function init($x){
    $tmp=new self($x);
    if($tmp->ok)return $tmp;
    unset($tmp);
    return false;
  }
}
$test1=a::init(1);
$test2=a::init(2);
$test1 è una classe di tipo a; $test2==false;

Ciao
01

Re: php class: abort __construct()

Inviato: mer 17 feb 2010, 7:15
da aschenaz
Così al volo...

Se provi
$test1=&new a(1);
$test2=&new a(2);
:?:

P.S.
Una curiosità: la dichiarazione "public" sulla __construct non è superflua?
Considera però che l'OO php5 lo conosco moolto lacunosamente e che ho intenzione
di approfondire. Anzi, se hai qualche linkino... Le poche volte che ho cercato,
ho trovato i soliti fumosi tutorial...

Re: php class: abort __construct()

Inviato: mer 17 feb 2010, 9:28
da ZeroUno
aschenaz ha scritto:$test1=&new a(1);
$test2=&new a(2);
che dovrebbe cambiare? so cosa fa & ma non ne vedo l'applicazione pratica in questo caso, cioè come risolve il problema.
Una curiosità: la dichiarazione "public" sulla __construct non è superflua?
si, credo di si. In verità credo che siano superflui tutti i public perchè mi sembra che sono sottointesi quando non specificati.
Io li metto per chiarezza
Considera però che l'OO php5 lo conosco moolto lacunosamente
idem...
Anzi, se hai qualche linkino...
http://www.php.net
:-)
solitamente mi rifaccio solamente a quella oppure a parte di codice visto in altri progetti (tipo joomla ecc)

Ciao
01