Visualizzazione risultati 1 fino 21 di 21

Discussione: PHP chiarimenti function e class

  1. #1
    Guest

    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!

  2. #2
    Guest

    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!

  3. #3
    Guest

    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!

  4. #4
    Guest

    Predefinito

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


    Ciao!

  5. #5
    Guest

    Predefinito

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

    grazie...ciaoo

  6. #6
    Guest

    Predefinito

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


    Ciao!

  7. #7
    Guest

    Predefinito

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

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

    ciao!

  8. #8
    Guest

    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!

  9. #9
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    In ogni caso, posso confermarti che il funzionamento delle classi in PHP è pressappoco quello che si ha in C++ (se non addirittura identico)

  10. #10
    Guest

    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!

  11. #11
    Guest

    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!

  12. #12
    Guest

    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!

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    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
    Ultima modifica di dreadnaut : 24-12-2008 alle ore 15.32.45

  14. #14
    Guest

    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!

  15. #15
    Guest

    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!

  16. #16
    Guest

    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!

  17. #17
    Guest

    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;

  18. #18
    Guest

    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!

  19. #19
    Guest

    Predefinito

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

    grazie..ciao!

  20. #20
    Guest

    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!

  21. #21
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    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.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •