Precedente :: Successivo |
Autore |
Messaggio |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 27 Gen 2009 17:15 Oggetto: [PHP] Errore su classe. |
|
|
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 |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 27 Gen 2009 17:51 Oggetto: |
|
|
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 |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 27 Gen 2009 17:58 Oggetto: |
|
|
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 |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 27 Gen 2009 18:32 Oggetto: |
|
|
provato anche con la definizione del costruttore (come detto da freemind)? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 27 Gen 2009 18:36 Oggetto: |
|
|
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 |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 27 Gen 2009 20:46 Oggetto: |
|
|
E' la stessa cosa, non funziona, come mai? |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 27 Gen 2009 20:56 Oggetto: |
|
|
da lo stesso errore? |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 27 Gen 2009 21:40 Oggetto: |
|
|
si |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 27 Gen 2009 21:48 Oggetto: |
|
|
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 |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 27 Gen 2009 22:06 Oggetto: |
|
|
Il segondo codice da te postato non va (non visualizza niente) cmq nn ti preoccupare il primo codice va, grazie. |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 27 Gen 2009 22:28 Oggetto: |
|
|
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 |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 10:15 Oggetto: |
|
|
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)." ".$this->mese_lett." '".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 |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 16:05 Oggetto: |
|
|
che versione di php usi in locale e on-line? |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 17:01 Oggetto: |
|
|
In locale utilizzo PHP5, mentre il server dove ho mezzo il mio sito ha, sia il supporto per PHP4 che quello per PHP5. |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 17:05 Oggetto: |
|
|
ci posti il file config.inc? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 28 Gen 2009 17:05 Oggetto: |
|
|
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 |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 17:07 Oggetto: |
|
|
Citazione: | lascia perdere e passa ad apache |
quoto
davvero ottima domanda?  |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 17:15 Oggetto: |
|
|
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')." ".$this->mese_lett." '".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 |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 17:18 Oggetto: |
|
|
usi altervista? |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 17:19 Oggetto: |
|
|
si. |
|
Top |
|
 |
|