Precedente :: Successivo |
Autore |
Messaggio |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 17:21 Oggetto: |
|
|
Allora tempo fa altervista aveva nella root principale una cartella chiamata php5,esiste ancora? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 28 Gen 2009 17:33 Oggetto: |
|
|
sevenjeak ha scritto: | Cmq, freemind, online ho detto di avere il supporto per la 4 e la 5, non solo per la quatro |
intanto che rispondevo a
mdweb ha scritto: | che versione di php usi in locale e on-line? |
sono arrivati gli altri messaggi quindi non sapevo ancora che avevi risposto.
Allora è semplice, configuri il webserver per usare php5 fine.
Come si fa non lo so, perchè iis non l'ho mai usato con php e non so come è messo il server di altervista.
In teoria nel supporto tecnico del fornitore ci dovrebbe essere spiegato come attivare uno o l'altro, oppure dovresti avere nel pannello di admin la possibilità di switch delle versioni, oppure dovrai caricare i files in una dir piuttosto che in un'altra. |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 17:33 Oggetto: |
|
|
No, almeno che non sia nascosta, ma io creto di no. |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 28 Gen 2009 17:34 Oggetto: |
|
|
Note bene l'ora e minuti del mio ultimo post e del tuo... |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 17:40 Oggetto: |
|
|
sevenjeak ha scritto: | No, almeno che non sia nascosta, ma io creto di no. |
forse l'hanno tolta,secondo me era moltuo utile.
Praticamente quanto tu mettevi un file nella root principale vieniva interpretato come php4 mentre quando lo mettevi nella root php5 lo interpretava come php5.
Se adesso non c'è forse il supporto è solo per una delle due...
Non hai un altro web hosting per fare una prova al volo? |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 17:59 Oggetto: |
|
|
Ho provato ha postare il codice su ilbello.com, li mi funziona.
Allorà è altervista che nn lo supporta +? |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 18:01 Oggetto: |
|
|
allora a questo punto è come avevo detto.
Chiedi nel forum di altervista chiarimenti agli amministratori  |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 18:26 Oggetto: |
|
|
mdweb ha scritto: |
Chiedi nel forum di altervista chiarimenti agli amministratori
|
Cosa?, se altervista supportato php5.
P.S.: ho risolto, da poco hanno fatto un tasto presente su altervista, che ti genera un file che ti permette la micrazione da PHP4 a PHP5, ho provato il mio codice è mi funziona.
Grazie a tutti per il vostro aiuto. |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 28 Gen 2009 19:30 Oggetto: |
|
|
Prego  |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 28 Gen 2009 19:49 Oggetto: |
|
|
Ansi, senti questo:
Se io ad esempio ho la stessa classe, cosi modificata:
Codice: |
<?
class todey
{
private $mese_num;
private $mese_lett;
private $result_date;
public function __construct()
{
$this->mese_num = date(m);
$this->reflash_date();
}
public function reflash_date()
{
$mese = $this->mese_num;
switch($mese) {
case 01:
$this->mese_lett = "Gennaio";
break;
}
$this->result_date = date(d)." ".$this->mese_lett." '".date(y);
}
}
?>
|
Che naturarmente ho verificato se va on-line ed è tutto apposto.
Ma ora ho scritto sotto questo codice per prendere il valore di result_date sia cosi:
Codice: |
<?
$ToDay = new todey();
$Todey->result_date;
print_r($ToDay);
?>
|
e sia cosi:
Codice: |
<?
$ToDay = new todey();
$Todey->result_date();
print_r($ToDay);
?>
|
Ma entrambi, invece di stamparmi il valore di result_date mi stampa questo errore:
Codice: |
Fatal error: Call to undefined method todey::result_date() in /membri/sevenjeak/Under_cost/inc/config.inc.php on line 28
|
Come mai? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 29 Gen 2009 00:05 Oggetto: |
|
|
Ti riporto il tuo codice aggiungendo dei commenti per chiarire alcune cose:
Codice: |
<?
class todey
{
/**
* Queste sono 3 proprietà, ossia 3 variabili "interne" alla classe che ne descrivono appunto le proprietà.
* Sono state dichiarate "private" quindi accessibili solo dall'interno della classe; in altre parole solo i medoti della classe
* le possono usare
*/
private $mese_num;
private $mese_lett;
private $result_date;
/**
* Questo è il costruttore, un metodo "speciale" che serve ad inizializzare la classe ossia a settare i valori
* iniziali delle proprietà e ad eseguire le operazioni "preliminari". Normalmente è public ossia accessibile dall'esterno
* della classe
*/
public function __construct()
{
$this->mese_num = date(m);
$this->reflash_date();
}
/**
* Altro metodo pubblico, vale il discorso del costruttore tranne che la chiamata va esplicitata (il costruttore viene chiamato in automatico
* quando istanzi la classe)
*/
public function reflash_date()
{
$mese = $this->mese_num;
switch($mese)
{
case 01:
$this->mese_lett = "Gennaio";
break;
}
$this->result_date = date(d)." ".$this->mese_lett." '".date(y);
}
}
?>
|
Le proprietà sono variabili, i metodi sono funzioni.
I due segmenti qui sotto:
Codice: |
<?
// (1)
$ToDay = new todey();
$Todey->result_date;
print_r($ToDay);
?>
|
e
Codice: |
<?
// (2)
$ToDay = new todey();
$Todey->result_date();
print_r($ToDay);
?>
|
hanno entrambi la seconda riga senza senso.
Nel codice (1) tu vuoi fare riferimento alla proprietà private $result_date dall'esterno della classe e questo non è possibile, come commentato nella classe le proprietà (e i metodi) private possono essere usate solo all'interno della classe.
Anche se fosse public ("public $result_date;") il codice non avrebbe senso perchè è come se scrivessi:
Codice: |
<?
...
$i=0;
...
...
$i // <- che vuol dire?
?>
|
Nel codice (2) addirittura tenti di chiamare un metodo result_date() che non esiste. Infatti $result_date è una proprietà (ora non ci interessa se pubblica o no) e il metodo (public) "result_date()" non c'è (infatti l'errore del parser indica proprio il tentativo di accedere ad un metodo che non esiste)
Se vuoi poter utilizzare la proprietà "$result_date" fuori dalla classe, ossia, la vuoi rendere pubblica, devi definirla public.
Facendo così potrai settarle il valore con:
Codice: |
<?
$ToDay = new todey();
$Todey->result_date=date('m');
?>
|
oppure richiamarla con:
Codice: |
<?
$ToDay = new todey();
print $Todey->result_date;
?>
|
Adesso potremmo iniziare un lungo discorso sul fatto di rendere o no pubblica una proprietà e quindi di non usare o usare un accessor e un mutator method per tale proprietà ma per ora limitiamoci alle basi.
Se non vuoi renderla privata ma vuoi poterla raggiungere anche da fuori devi creare due metodi che di solito hanno la seguente forma:
Codice: |
<?
class ...
{
...
private $prop;
// accessor method, in generale il nome è 'get' + nome-proprietà, serve a leggere una proprietà
public function getProp()
{
return $this->prop;
}
// mutator method, in generale il nome è 'set' + nome-proprietà($v), serve a modificare una proprietà
public function setProp($v)
{
$this->prop=$v;
}
...
}
?>
|
Nel tuo caso otterremmo:
Codice: |
<?
class todey
{
private $mese_num;
private $mese_lett;
private $result_date;
public function __construct()
{
$this->mese_num = date(m);
$this->reflash_date();
}
public function reflash_date()
{
$mese = $this->mese_num;
switch($mese) {
case 01:
$this->mese_lett = "Gennaio";
break;
}
$this->result_date = date(d)." ".$this->mese_lett." '".date(y);
}
public function getResult_date()
{
return $this->result_date;
}
public function setResult_date($v)
{
$this->result_date=$v;
}
}
?>
|
Pro e contro per entrambe le situazioni.
Divagazione 1:
Continui a lasciarti indietro gli apici nella funzione date(), attento, è un caso che funzioni, in quanto dipende da come è configurato php. La funzione ha il prototipo: "string date ( string $format [, int $timestamp ] )" quindi se la usi con un parametro deve essere una stringa!
Divagazione 2:
mdweb ha scritto: | davvero ottima domanda?  |
Sì, purtroppo quando lavori con i tuoi strumenti e devi portare il lavoro in un ambiante che non è configurato da te rischi casini con le versioni.
Io ho lavorato un sacco con le versioni di sviluppo e produzioni fuori sincro (di molto) e succedeva di tutto: quello che andava già non andava su e viceversa. Ovviamente dovendo lavorare sia giù che su immagina i casini... |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 29 Gen 2009 09:05 Oggetto: |
|
|
Aspe Aspe.
Mi ero dimenticato di aggiornare il mio vecchio topic, avevo risolto in parte, ma dopo mi stampava questo risultato:
Non so perche mi stampava l'uno dopo l'anno.
Cmq. ho capito quello che hai detto, ma alla fine, io cosa dovrei scrivire per farmi prendere il varore della proprieta result_date?
tu hai scritto che mi conviene utilizare un medoto get con un'altro medodo set, ma questo non serve solo per modificare il valore delle proprietà?
P.S. : Non la facevo cosi complicata, sarà che è la prima classe che scrivo  |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 31 Gen 2009 16:16 Oggetto: |
|
|
Per quanto riguarda il tuo P.S.: non ti preoccupare, è così perchè sei all'inizio con la programmazione ad oggetti.
Per settare e prendere il valore di una proprietà
dipende da cosa vuoi fare.
Esempio cretino:
Codice: |
<?php
class Box
{
public width;
public height;
public depth;
}
?>
|
Box è una classe senza comportamento ossia senza metodi. Le 3 proprietà sono pubbliche per cui possono essere usate all'esterno della stessa.
Dopo che hai istanziato la classe dovrai settarle a manina perchè non c'è un costruttore che le inizializzi:
Codice: |
<?php
class Box
{
public width;
public height;
public depth;
}
$b1=new Box();
$b2=new Box();
// Imposto le proprietà di $b1
$b1->width=5;
$b1->height=2;
$b1->depth=3;
// Imposto le proprietà di $b2 come due volte quelle di $b1
$b2->width=2*$b1->width;
$b2->height=2*$b1->height;
$b2->depth=2*$b1->depth;
?>
|
Nell'esempio io istanzio due scatole $b1 e $b2, setto le proprietà della prima come se fossero var normali per cui l'assegnazione è a sinistra dell'=.
Poi setto $b2 leggendo le proprietà omonime di $b1 e le moltiplico per due; come per $b1 le prop di $b2 sono a sinstra di = mentre le altre a destra. Quando ragioni con le proprietà devi ragionare come con le var normali.
Se hai la necessità di vincolare alcuni valori allora è meglio usare i metodi set, uno per ogni proprietà.
In quest'ottica potremmo riscrivere la precedente classe con:
Codice: |
<?php
<?php
class Box
{
private width;
private height;
private depth;
public function setWidth($v)
{
$this->width=$v;
}
public function setHeight($v)
{
$this->height=$v;
}
public function setDepth($v)
{
$this->depth=$v;
}
public function getWidth()
{
return $this->width;
}
public function getHeight()
{
return $this->height;
}
public function getDepth()
{
return $this->depth;
}
}
?>
|
Ora le proprietà sono private quindi dall'esterno non raggiungibli. Per settare i loro valori occorre l'uso dei metodi set, il loro utilizzo permettere di aggiungere eventuali controlli sull'impossibilità di impostare valori negativi, una scatola non può avere un'altezza minore di zero!
Idem per i metodi get che servono ad avere indietro i loro valori, se tu per qualche motivo devi memorizzare questi 3 dati in millimetri ma quando li visualizzi li devi stampare in metri allora occorrerà modificare i get in modo che ritornino il valore moltiplicato per 1000.
Si potrebbe discutere a lungo su come impostare la visibilità dei metodi, delle proprietà, se usare o no i set e get etc... ma diventerebbe un piccolo corso sull'oop che prima o poi comunque verrà fatto qui su questi teleschermi! |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 31 Gen 2009 20:02 Oggetto: |
|
|
Ok, questo lo capito, mi conviene impostare tutte le proprietà come pubblic? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 01 Feb 2009 23:34 Oggetto: |
|
|
Vedi, dipende da cosa devi fare e da come lo vuoi fare.
Un concetto importante e fondamentale dell'oop è l'incapsulamento.
In pratica il nascondere al mondo esterno determinate cose della classe permette a questa di non farsi conoscere e di risultare come una black-box.
Tu dirai agli utilizzatori della classe: "usate questo metodo per fare..", "usate questa proprietà per vedere il tal valore..." ma non gli dirai mai come la classe funzione, perchè a loro non serve saperlo.
In pratica tutto quello che è ad uso interno deve restare privato mentre quello che va usato anche dall'esterno deve essere pubblico.
Se tu vuoi permettere di settare i valori di una proprietà ovunque allora mettila public, se non vuoi che sia raggiungibile dall'esterno devi settarla private senza usare poi i mutator e gli accessor, se vuoi invece renderla accessibile da fuori con dovuti controlli allora mettila private e usa i set e get.
Nel tuo caso potresti scegliere qualunque strada perchè potresti decide che le proprietà debbano essere settare anche da fuori la classe oppure decidere che sono ad uso interno quindi devi metterle private.
Forse darebbe più semplice se spiegassi che cosa vorresti che facesse la classe così magari partendo da un caso pratico riusciamo ad aiutarti meglio |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 02 Feb 2009 13:32 Oggetto: |
|
|
Ho provato ha mettere tutte le proprietà come public, ho risclitto il codice cosi:
Codice: |
class toDey
{
public $mese;
public $mese_long;
public $rs;
class __construct()
{
$this->mese = date('m');
$this->reflasch_dey();
}
class reflasch_dey()
{
$mese_num = $this->mese;
switch ($mese_num) {
case 01:
$this->mese_long = "$nbsp;Gennaio";
break;
}
$this->rs = date('d').$this->mese_long." '".data('y');
}
}
$dey = new toDay();
print_r($day->rs_dey);
|
Ma quando vado ha eseguirlo su server mi visualizza questo errore:
Codice: |
Parse error: syntax error, unexpected T_CLASS, expecting T_FUNCTION in /membri/sevenjeak/Under_cost/inc/config.inc.php on line 8
|
Ho rivisto il codice più di una volta ma non trovo nessun errore. |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 05 Feb 2009 23:45 Oggetto: |
|
|
Nel tuo codice ci sono un po' di errori.
A volte usi toDey altre volte toDay e lo stesso per altre var, ho reso coerenti alcuni nomi.
Inoltre non puoi con php definire classi innestate, ma credo che tu volessi definire dei metodi, posto le tue righe con sotto le mie
Codice: |
<?php
class toDey // tua
class toDay // mia
...
class __construct() // tua
public function __construct() // mia
...
class reflasch_dey() // tua
public function reflasch_dey() // mia
...
case 01: // tua
$this->mese_long = "$nbsp;Gennaio"; // tua
case 02: // mia, ho messo il due perchè oggi siamo in febbraio
$this->mese_long = " Febbraio"; // mia, le html entities si scrivono con la & e non con il $
...
$this->rs = date('d').$this->mese_long." '".data('y'); // tua
$this->rs = date('d').$this->mese_long." '".date('y'); // mia
...
$dey = new toDay(); // tua
print_r($day->rs_dey); // tua
$day = new toDay(); // mia
print_r($day->rs); // mia
?>
|
e in definitiva:
Codice: |
<?php
class toDay
{
public $mese;
public $mese_long;
public $rs;
public function __construct()
{
$this->mese = date('m');
$this->reflasch_dey();
}
public function reflasch_dey()
{
$mese_num = $this->mese;
switch ($mese_num) {
case 02:
$this->mese_long = " Febbraio";
break;
}
$this->rs = date('d').$this->mese_long." '".date('y');
}
}
$day = new toDay();
print_r($day->rs);
?>
|
|
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 06 Feb 2009 15:54 Oggetto: |
|
|
Non avevo proprio notato questi errori, cmq ora correggo e ti faccio sapere
P.S. : Il codice mi va, ora lo dovrei stampare in una pagina in qui ed inclusa la classe, ma il problema e che mi stampa un 1 dopo l'anno, come mai? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 07 Feb 2009 19:37 Oggetto: |
|
|
Puoi postare il codice che ti rogna? |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 07 Feb 2009 23:03 Oggetto: |
|
|
Il codice è quello che mi hai scritto nel post precedente, ho sono modificato lo switch, cmq è questo:
Codice: |
<?php
class toDay
{
public $mese;
public $mese_long;
public $rs;
public function __construct()
{
$this->mese = date('m');
$this->reflasch_dey();
}
public function reflasch_dey()
{
$mese_num = $this->mese;
switch ($mese_num) {
case 01:
$this->mese_long = " Gennaio";
break;
case 02:
$this->mese_long = "$nbsp;Febbraio";
break;
case 03:
$this->mese_long = "$nbsp;Marzo";
break;
case 04:
$this->mese_long = "$nbsp;Aprile";
break;
case 05:
$this->mese_long = "$nbsp;Maggio";
break;
case 06:
$this->mese_long = "$nbsp;Giugno";
break;
case 07:
$this->mese_long = "$nbsp;Luglio";
break;
case 08:
$this->mese_long = "$nbsp;Agosto";
break;
case 09:
$this->mese_long = "$nbsp;Settembre";
break;
case 10:
$this->mese_long = "$nbsp;Ottobre";
break;
case 11:
$this->mese_long = "$nbsp;Novembre";
break;
case 12:
$this->mese_long = "$nbsp;Dicembre";
break;
}
$this->rs = date('d').$this->mese_long." '".date('y');
}
}
$day = new toDay();
?>
|
Solamente che l'ultima riga inserita da te: print_r($day->rs); si trova in una pagina in qui è inclusa al suo interno la classe qui sopra e postata anche da te. |
|
Top |
|
 |
|