Torna indietro   AlterVista | Spazio web gratis, hosting free php mysql > L'angolo del webmaster > PHP, MySql e Apache (.htaccess)

Rispondi
 
LinkBack Strumenti discussione Modalità visualizzazione
  #1 (permalink)  
Vecchio 24-12-2008, 09.16.21
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito PHP chiarimenti function e class

Ciao,
ho letto un po su html.it come si usano le classi in php, ma non mi é parso molto chiaro, in primo volevo chiedervi: le funzioni vengono scritte direttamente all'interno della classe? (ho studiato le classi in c++ e le classi venivano scritte prima come metodo per descrivere un oggetto della classe, e poi all'esterno venivano eseguite)

per secondo voelvo sapere un po' la differenza tra public e pivate (c'é anche in php nO? in c++ nn l'avevo capita un gran che)

grazie...ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #2 (permalink)  
Vecchio 24-12-2008, 09.32.30
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Non posso farti il confronto con altri linguaggi perchè conosco solo il php.

Posso dirti che le classi contengono metodi che possono essere private, public o protected.
Le differenze le puoi leggere nella guida di riferimento, ma penso non ci sia molta differenza col C.

Per richiamare un metodo di una classe, puoi istanziare dapprima la classe e poi chiamare il metodo interessato, oppure scrivere nomeclasse::metodo([args])

Per altre domande specifiche, chiedi pure.


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #3 (permalink)  
Vecchio 24-12-2008, 10.15.45
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

ma i metodi possono appartenere alla classe ma esserne esterni? vorrei fare due file: class.php e function.php
in class ci saranno le classi e in function le funzioni,...
provo a scrivere qualcosa per vedere se é possibile:

class.php
Codice PHP:
class myClass {
 private 
$nome;

 public function 
getNome($in_nome);

function.php
Codice PHP:
function myClass::getNome ($in_nome) {
 
$nome $in_nome;

come faccio a stampare il nome?
Codice PHP:
myClass::$nome 
mi suona un po strano

PS: questo esempio é un po' inutile, l'ho scritto per vedere se é possbili fare cose del genere...

grazie dell'aiuto...ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #4 (permalink)  
Vecchio 24-12-2008, 10.21.35
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Non mi risulta essere possibile.
I metodi di una classe devono stare dentro la stessa classe.


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #5 (permalink)  
Vecchio 24-12-2008, 11.54.28
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

sei sicuro? mi puoi dire ancora perfavore come si stampa $nome che fa parte della classe?

grazie...ciaoo
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #6 (permalink)  
Vecchio 24-12-2008, 11.56.39
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Se è privata, non puoi stamparla se non direttamente da un metodo (pubblico) interno alla classe stessa.


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #7 (permalink)  
Vecchio 24-12-2008, 11.58.40
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

si può fare qualcosa tipo un elenco:
public:
--
--
--
private:
--
--

mi puoi dire anche cos'é protected in due parole?

ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #8 (permalink)  
Vecchio 24-12-2008, 12.06.37
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

No, per ogni variabile devi indicarne la visibilità (public di default)

Protected è come private tranne che per le classi figlie (class figlia extends madre)
Quindi una variabile dichiarata protected sarà visibile alle classi figlie ma non all'esterno.


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #9 (permalink)  
Vecchio 24-12-2008, 12.33.20
L'avatar di mythologia
Moderatore
 
Data registrazione: 05-01-2004
Messaggi: 2,603
Invia un messaggio via MSN a mythologia
Predefinito

In ogni caso, posso confermarti che il funzionamento delle classi in PHP è pressappoco quello che si ha in C++ (se non addirittura identico)
Rispondi citando
  #10 (permalink)  
Vecchio 24-12-2008, 13.11.20
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

ma se io dovessi passare un valore ad un'altra funzione di un altra classe, ad esempio un ID, come faccio se ho public $ID?

cosi: myClass2::function(myClass1::ID); non funziona, esiste un modo per farlo?

Grazie..ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #11 (permalink)  
Vecchio 24-12-2008, 13.20.11
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Bè, se quella variabile è il risultato di una funzione, devi prima eseguire quella funzione che restituirà quella variabile valorizzata e potrai usarla come argomento per un'altra funzione.
Se invece è un dato statico, devi poterlo memorizzare da qualche parte in maniera tale da poterla recuperare in qualsiasi classe, ad esempio in un file di configurazione da includere.


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #12 (permalink)  
Vecchio 24-12-2008, 13.25.45
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

Codice PHP:
class myUser {

    private 
$ID;

    public function 
getID($id) {
        
$ID $id;
    }
    
    public function 
getFilesList($ID) {
        
$query "SELECT * FROM myfiles WHERE ID_user='$ID'";
        
$result mysql_query($query);
        while (
$array mysql_fetch_array($result)) {
            echo 
$array[2];
        }
    }


nella prima funzione salvo l'ID dell'utente, che dovrebbe andare in private $ID, nella seconda funzione come faccioa riutilizzarlo?

PS: penso di avere capito perché nn va, nella prima funzione come faccio a salvare il valore in private $ID per poi riutilizzarlo nella seconda?

grazie...ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #13 (permalink)  
Vecchio 24-12-2008, 13.27.22
L'avatar di dreadnaut
Super Moderatore
 
Data registrazione: 22-02-2004
Messaggi: 4,251
Invia un messaggio via MSN a dreadnaut
Predefinito

io vedo grande confusione in questo thread, ma lasso spiegare tutto da zero

Bluster, le classi in php sono simili come concetto a quelle del C++, ma molto semplificate. In più, sia la sintassi che la semantica cambiano da php4 a php5 quindi è importante anche sapere di quale versione si stia parlando.

Consiglio, prima di tutto, una lettura seria e completa di due pagine della guida del php:
Classi ed oggetti in php4
Classi ed oggetti in php5
__________________
chezDreadnautdailyDreadnautQualcosa da leggere:
"Un <BR/> è impuro, punto."
"I <P>&nbsp;</P> non hanno diritto di esistere."

Ultima modifica di dreadnaut : 24-12-2008 alle ore 13.32.45
Rispondi citando
  #14 (permalink)  
Vecchio 24-12-2008, 13.29.28
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Devi usare $this per riferirti a variabili interne alla classe.

Codice PHP:
class myUser {

    private 
$ID;

    public function 
getID($id) {
        
$this->ID $id;
    }
    
    public function 
getFilesList() {
        
$query "SELECT * FROM myfiles WHERE ID_user='".$this->ID."'";
        
$result mysql_query($query);
        while (
$array mysql_fetch_array($result)) {
            echo 
$array[2];
        }
    }



Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #15 (permalink)  
Vecchio 24-12-2008, 13.59.28
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

ho provato con $this, mi da:
Fatal error: Using $this when not in object context in C:\Program Files\xampp\htdocs\mydesk\include\class.php on line 8

grazie dreadnaut per i link...

ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #16 (permalink)  
Vecchio 24-12-2008, 14.03.05
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Azz, già, mi ero dimenticato di chiederti quale versione di php stavi usando!

Per il messaggio di errore, puoi postare lo script intero?


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #17 (permalink)  
Vecchio 24-12-2008, 14.13.18
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

bhé nn c'é molto altro, anche se si trovano in file diversi posto attaccato:
Codice PHP:
class myUser {

    private 
$ID;

    public function 
getID($id) {
        
$this->ID $id;
    }
    
    public function 
getFilesList() {
        
$query "SELECT * FROM myfiles WHERE ID_user='".$this->ID."'";
        
$result mysql_query($query);
        while (
$array mysql_fetch_array($result)) {
            echo 
$array[2];
        }
    }

}  

myUser::getID($_SESSION['ID_user']);
myUser::getFilesList(); 
la sessione é = 1;
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #18 (permalink)  
Vecchio 24-12-2008, 14.43.53
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Ah già:
Codice PHP:
<?php
class myUser {

    private static 
$ID;

    public function 
getID($id) {
        
self::$ID $id;
    }
    
    public function 
getFilesList() {
        
$query "SELECT * FROM myfiles WHERE ID_user='".self::$ID."'";
        
$result = @mysql_query($query);
        while (
$array mysql_fetch_array($result)) {
            echo 
$array[2];
        }
    }

}  

myUser::getID('1');
myUser::getFilesList(); 
?>
Oppure:
Codice PHP:
<?php
class myUser {

    private 
$ID;

    public function 
getID($id) {
        
$this->ID $id;
    }
    
    public function 
getFilesList() {
        
$query "SELECT * FROM myfiles WHERE ID_user='".$this->ID."'";
        
$result = @mysql_query($query);
        while (
$array mysql_fetch_array($result)) {
            echo 
$array[2];
        }
    }

}  

$user=new myUser;
$user->getID('1');
$user->getFilesList(); 
?>

Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #19 (permalink)  
Vecchio 24-12-2008, 14.56.56
Utente
 
Data registrazione: 18-11-2008
Messaggi: 172
Predefinito

mi sai spiegare la differenza sostanziale fra le due? perché nella seconda crei un puntatore alla classe?

grazie..ciao!
__________________
http://www.bluster.altervista.org/ WIP
Rispondi citando
  #20 (permalink)  
Vecchio 24-12-2008, 15.05.06
L'avatar di debug
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,880
Predefinito

Più che altro istanzio la classe e uso quell'istanza come riferimento alle variabili, ai metodi, etc.
Nel primo esempio non te lo so spiegare tecnicamente, ma in pratica non uso un'istanza per eseguire i metodi della classe, ma uso il cosidetto "Scope Resolution Operator", cioè i doppi due punti ::

Come già detto, trovi molti esempi e molte (migliori) spiegazioni sulla guida di riferimento.


Ciao!
__________________
[ debug ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #21 (permalink)  
Vecchio 24-12-2008, 15.09.55
L'avatar di dreadnaut
Super Moderatore
 
Data registrazione: 22-02-2004
Messaggi: 4,251
Invia un messaggio via MSN a dreadnaut
Predefinito

@bluster: perché non hai ancora letto i due link suggeriti sopra?

in php non esistono i puntatori, e l'operatore -> serve ad accedere ai membri (pubblici) di un oggetto.
__________________
chezDreadnautdailyDreadnautQualcosa da leggere:
"Un <BR/> è impuro, punto."
"I <P>&nbsp;</P> non hanno diritto di esistere."
Rispondi citando
Rispondi

Strumenti discussione
Modalità visualizzazione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks are Attivato
Pingbacks are Attivato
Refbacks are Disattivato



Tutti gli orari sono GMT +1. Adesso sono le 06.37.58.