Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[PHP] Errore su classe.
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 27 Gen 2009 17:15    Oggetto: [PHP] Errore su classe. Rispondi citando

Salve utenti.

Come potete ben capire dal titolo ho riscosso, in un mio script php un errore nella classe.

Veramente è la mia prima volta che uso le classi in php, insomna, ho creato questa classe:
Codice:

<?
class todey
{
   private $mese_num;
   private $result_date;
   public function __construct()
   {
      $this->mese_num = date(m);
   }
   public function aggiorna()
   {
      $this->$result_date = "risultato";
   }
}
print_r(new todey);
?>

Come potete vedere ho messo un print_r dopo la classe, per vedere che handava tutto bene, ma mi viene stampato questo:
Codice:

todey Object ( [mese_num:private] => 01 [result_date:private] => )


Comè result_date non mi prende il valore che gli ho asegnato con la funzione aggiorna?
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 27 Gen 2009 17:51    Oggetto: Rispondi citando

ciao,
Codice:

<?
...
$this->$result_date = "risultato";
...
?>

non va bene perchè hai messo il dollaro anche prima del nome della proprietà.
Riscrivi con:
Codice:

<?
...
$this->result_date = "risultato";   //no $ dopo ->
...
?>


In oltre credo che il costruttore lo volessi definire con:
Codice:

<?
public function __construct(m)  // il parametro formale m, nel tuo esempio non c'è
{
  $this->mese_num = date(m);
}
?>
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 27 Gen 2009 17:58    Oggetto: Rispondi citando

freemind ha scritto:
ciao,
Codice:

<?
...
$this->$result_date = "risultato";
...
?>


Non havevo fatto caso ha quello, cmq, ho provato ma il risultato è sembre quello di prima, come mai?
Top
Profilo Invia messaggio privato HomePage
mdweb
Dio maturo
Dio maturo


Registrato: 18/12/07 16:59
Messaggi: 4412

MessaggioInviato: 27 Gen 2009 18:32    Oggetto: Rispondi citando

provato anche con la definizione del costruttore (come detto da freemind)?
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 27 Gen 2009 18:36    Oggetto: Rispondi citando

Asp,
avevo frainteso il significato di m,
prova con:
Codice:

<?
class todey
{
   private $mese_num;
   private $result_date;
   public function __construct()  // nessun parametro formale
   {
      $this->mese_num = date('m');   // gli apici!
   }
   public function aggiorna()
   {
      $this->result_date = "risultato";  // no $ dopo ->
   }
}
print_r(new todey());   // ricorda che quando istanzi devi mettere sempre le (), se ci sono dei parametri li passi altrimenti no, come una funzione normale
?>
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 27 Gen 2009 20:46    Oggetto: Rispondi citando

E' la stessa cosa, non funziona, come mai?
Top
Profilo Invia messaggio privato HomePage
mdweb
Dio maturo
Dio maturo


Registrato: 18/12/07 16:59
Messaggi: 4412

MessaggioInviato: 27 Gen 2009 20:56    Oggetto: Rispondi citando

da lo stesso errore?
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 27 Gen 2009 21:40    Oggetto: Rispondi citando

si
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 27 Gen 2009 21:48    Oggetto: Rispondi citando

Siamo due cucù!!
Tu non hai mai chiamato il metodo aggiorna() quindi il risultato della print_r è corretto.

O fai:
Codice:

<?
class todey
{
   private $mese_num;
   private $result_date;
   public function __construct()  // nessun parametro formale
   {
      $this->mese_num = date('m');   // gli apici!
      $this->aggiorna();   // chiami qui il metodo
   }
   public function aggiorna()
   {
      $this->result_date = "risultato";  // no $ dopo ->
   }
}
print_r(new todey());   // ricorda che quando istanzi devi mettere sempre le (), se ci sono dei parametri li passi altrimenti no, come una funzione normale
?>


oppure:
Codice:

<?
class todey
{
   private $mese_num;
   private $result_date;
   public function __construct()  // nessun parametro formale
   {
      $this->mese_num = date('m');   // gli apici!
     
   }
   public function aggiorna()
   {
      $this->result_date = "risultato";  // no $ dopo ->
   }
}
$t=new todey();
$t->aggiorna();
print_r($t);   // ricorda che quando istanzi devi mettere sempre le (), se ci sono dei parametri li passi altrimenti no, come una funzione normale
?>


ora che sono a casa tranquillo riesco a capire quel che leggo!
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 27 Gen 2009 22:06    Oggetto: Rispondi citando

Il segondo codice da te postato non va (non visualizza niente) cmq nn ti preoccupare il primo codice va, grazie.
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 27 Gen 2009 22:28    Oggetto: Rispondi citando

io dal secondo script oppengo
Codice:

todey Object ( [mese_num:private] => 01 [result_date:private] => risultato )


che è il risultato voluto
(ho fatto il copia incolla da quello che ho postato all'editor per essere sicuro di non aver postato degli errori)
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 28 Gen 2009 10:15    Oggetto: Rispondi citando

Avro saltato qualche righa, cmq ora ri provo.

Ora ho modificato reggermente il codice aggiungento un'altra variabile privata, quando lo provo sul mio server locale va tutto bene, ma quando lo provo pubblicato on-line mi da questo errore:
Codice:

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/sevenjeak/Under_cost/inc/config.inc.php on line 8

Il codice ora è questo:
Codice:

class todey
{
   private $mese_num;
   private $mese_lett;
   private $result_date;
   public function __construct()
   {
      $this->mese_num = date(m);
      $this->aggiorna();
     $this->result_date = date(d)."&nbsp;".$this->mese_lett."&nbsp;'".date(y);
   }
   public function aggiorna()
   {
      $mese = $this->mese_num;
   switch ($mese) {
    case 01:
     $this->mese_lett = "Gennaio";
    break;
   }
   }
}
$ToDay = new todey();
print_r($ToDay);


Da quello che sono riuscito a capire è un errore di sintassi. ma non vedò nessun errore di questo genere:

Ho anche provato ha metere i paramentri dentro le funzione date con l'apice ma niente, sempre lo stesso errore.

come mai?
Top
Profilo Invia messaggio privato HomePage
mdweb
Dio maturo
Dio maturo


Registrato: 18/12/07 16:59
Messaggi: 4412

MessaggioInviato: 28 Gen 2009 16:05    Oggetto: Rispondi citando

che versione di php usi in locale e on-line?
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 28 Gen 2009 17:01    Oggetto: Rispondi citando

In locale utilizzo PHP5, mentre il server dove ho mezzo il mio sito ha, sia il supporto per PHP4 che quello per PHP5.
Top
Profilo Invia messaggio privato HomePage
mdweb
Dio maturo
Dio maturo


Registrato: 18/12/07 16:59
Messaggi: 4412

MessaggioInviato: 28 Gen 2009 17:05    Oggetto: Rispondi citando

ci posti il file config.inc?
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 28 Gen 2009 17:05    Oggetto: Rispondi citando

mdweb ha scritto:
che versione di php usi in locale e on-line?

Ottima domanda.
Per curiosità, gli script precedenti li hai provati online (quelli che alla fine ti andavano intendo).
Le miei ipotesi sono:
1) una delle due versioni che ti ho postato io andavano solo offline, la tua attuale va solo offline => offline hai php5 online il 4 ('sti cazzi)
2) sai di avere online php5, giù hai php5 , offline si online no => sarcazzo!

Se online hai la 4 e gli altri script postati qui non vanno il motivo è proprio quello, public,private,protected, __construct __destruct , gli altri magic-methods __* sono disponibili solo con php5, l'oop di php4 è indegna di quel nome.

Se hai la possibilità di accedere alla console online per vedere la versione di php il comando è "php -v", oppure se hai un pannellino in cui ti dice la versione, leggila lì.

Se online hai la 4, lascia perdere ogni scappatoia, o fai l'upgrade o se non si può cambia servizio. Se non puoi cambiare non usare l'oop (con tutte le conseguenze del caso).

Nel post sull'xml avevi detto che usavi iis, lascia perdere e passa ad apache, lighttpd o qualunque altro web-server (apache è sicuramente quello con più moduli). Se anche questa ipotesi non è praticabile avrai tanti problemi e cambierai linguaggio dalla disperazione, arriverai a considerare php il male e via così...
Top
Profilo Invia messaggio privato
mdweb
Dio maturo
Dio maturo


Registrato: 18/12/07 16:59
Messaggi: 4412

MessaggioInviato: 28 Gen 2009 17:07    Oggetto: Rispondi citando

Citazione:
lascia perdere e passa ad apache

quoto


davvero ottima domanda? Smile
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 28 Gen 2009 17:15    Oggetto: Rispondi citando

Cmq, freemind, online ho detto di avere il supporto per la 4 e la 5, non solo per la quatro, il codice cmq e questo:
Codice:

<?
// Classe todey: elaborazione data.
class todey
{
   private $mese_num;
   private $mese_lett;
   private $result_date;
   public function __construct()
   {
      $this->mese_num = date('m');
      $this->aggiorna();
     $this->result_date = date('d')."&nbsp;".$this->mese_lett."&nbsp;'".date('y');
   }
   public function aggiorna()
   {
      $mese = $this->mese_num;
   switch ($mese) {
    case 01:
     $this->mese_lett = "Gennaio";
    break;
   }
   }
}
//Variabili contenitore risultato classi.
$ToDay = new todey();
print_r($ToDay);
?>
Top
Profilo Invia messaggio privato HomePage
mdweb
Dio maturo
Dio maturo


Registrato: 18/12/07 16:59
Messaggi: 4412

MessaggioInviato: 28 Gen 2009 17:18    Oggetto: Rispondi citando

usi altervista?
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 28 Gen 2009 17:19    Oggetto: Rispondi

si.
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Vai a 1, 2, 3  Successivo
Pagina 1 di 3

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi