php class: abort __construct()

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 4930
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

php class: abort __construct()

Messaggioda ZeroUno » mar feb 16, 2010 16:57

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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4543
Iscritto il: mer lug 28, 2004 0:00
Nome Cognome: Nino
Slackware: 14.2 64bit
Kernel: 4.4.14
Desktop: XFCE
Località: Reggio Calabria
Contatta:

Re: php class: abort __construct()

Messaggioda aschenaz » mer feb 17, 2010 7:15

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...

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 4930
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: php class: abort __construct()

Messaggioda ZeroUno » mer feb 17, 2010 9:28

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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti