Repository 32bit  Forum
Repository 64bit  Wiki

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.

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
ZeroUno
Staff
Staff
 
Messaggi: 4300
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

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...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4417
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

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
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4300
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current


Torna a Programmazione

Chi c’è in linea

Visitano il forum: TurnitinBot [Bot] e 1 ospite