Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67

    Problema programmazione ad oggetti e variabili

    Sto lavorando per la prima volta con la programmazione ad oggetti e ho alcuni problemi con le variabili.

    Ho scoperto che questo restituisci un errore fatale:
    Codice PHP:
    class MyClass{

    public 
    $a = array();
    public 
    $a['1'] = $b;


    E a questo posso anche ovviare anche se mi piacerebbe che fosse possibile fare come sopra ma il problema più grosso è l'impossibilità di concatenare variabili:

    Codice PHP:
    class MyClass{

    $a 'ciao'.$b;


    C'è modo per riuscire a concatenare stringhe?

  2. #2
    Come fai tu è sbagliato, non puoi fare queste operazioni al di fuori delle funzioni. Puoi fare una cosa del genere (a puro titolo dimostrativo):

    Codice PHP:
    <?php
    class MyClass {

        public 
    $a = array();

        function 
    getValue($b) {
            
    $this->a[0] = $b
            return 
    $this->a;
        }

        function 
    getString($str) {
            
    $a "ciao".$str;
            return 
    $a;
        }

    }

    $mc = new MyClass();
    print_r($mc->getValue(10));
    echo 
    $mc->getString("ciao");
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Così complicato? A questo punto mi viene in mente una cosa: sarebbe possibile dichiarare le variabili fuori dalla classe e poi usarle dentro ei essa?

  4. #4
    Dipende da cosa vuoi fare, ci sono vari modi di procedere, ma non tutti sono corretti (anche se funzionanti). Se utilizzi la OOP dovresti ragionare in questi termini. Una classe dovrebbe fornirti un certo grado di astrazione per cui non puoi legarla a variabili o attributi esterni ad essa.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Originariamente inviato da satifal
    Dipende da cosa vuoi fare, ci sono vari modi di procedere, ma non tutti sono corretti (anche se funzionanti). Se utilizzi la OOP dovresti ragionare in questi termini. Una classe dovrebbe fornirti un certo grado di astrazione per cui non puoi legarla a variabili o attributi esterni ad essa.
    Vabbè proverò a fare tutto con le funzioni o semplici variabili dentro la classe.

    Grazie per l'aiuto.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Scusa, mi è sorto un altro problema.

    Nella mia classe ho una public function che finisce con un return.

    Quando creo un'istanza della classe voglio stampare quel return.

    Allora pensavo di fare così:

    Codice PHP:
    echo $classe->return
    Eppure mi dice che la variabile return non è definita.

    La devo definire prima della funzione all'interno della classe?

  7. #7
    Originariamente inviato da paglia_s
    Così complicato? A questo punto mi viene in mente una cosa: sarebbe possibile dichiarare le variabili fuori dalla classe e poi usarle dentro ei essa?
    Sarebbe piu' chiaro se tu dicessi esattamente cosa vuoi ottenere, perche' messa cosi' sembra il classico problema XY (tu provi a fare X ma quello che in realta' ti serve e' Y).

    Originariamente inviato da paglia_s
    Scusa, mi è sorto un altro problema.

    Nella mia classe ho una public function che finisce con un return.

    Quando creo un'istanza della classe voglio stampare quel return.

    Allora pensavo di fare così:

    Codice PHP:
    echo $classe->return
    Eppure mi dice che la variabile return non è definita.

    La devo definire prima della funzione all'interno della classe?
    Le funzioni (che all'interno di una classe si chiamano metodi) si richiamano con questa sintassi:
    Codice PHP:
    $object->method() 
    nota le parentesi tonde che indicano una chiamata ad una funzione, invece con questa sintassi:
    Codice PHP:
    $object->property 
    si fa riferimento ad una variabile dell'istanza della classe (in terminologia OO si chiama proprieta').

    Se poi hai chiamato la funzione "return" consiglio di cambiare nome visto che return e' una parola riservata.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Originariamente inviato da k.b
    Sarebbe piu' chiaro se tu dicessi esattamente cosa vuoi ottenere, perche' messa cosi' sembra il classico problema XY (tu provi a fare X ma quello che in realta' ti serve e' Y).


    Le funzioni (che all'interno di una classe si chiamano metodi) si richiamano con questa sintassi:
    Codice PHP:
    $object->method() 
    nota le parentesi tonde che indicano una chiamata ad una funzione, invece con questa sintassi:
    Codice PHP:
    $object->property 
    si fa riferimento ad una variabile dell'istanza della classe (in terminologia OO si chiama proprieta').

    Se poi hai chiamato la funzione "return" consiglio di cambiare nome visto che return e' una parola riservata.
    Nono la funzione non si chiama return. Praticamente è una funzione chiamata issueToken che prende dei valori con curl, e alla fine ne esce fuori un Array; a questo punto io voglio che l'array non venga stampato ma che sia accessibile al di fuori della funzione stessa.

    Come posso fare?

    Posto il codice così è più semplice:

    Codice PHP:
    <?php

    class UbuntuOne//dovrebbe richiedere user, pass e app_name

        
    public $login_api_url 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20';
            
        public function 
    issueTokens($login_api_url$user_email$pwd$app_name) { //controllo se token già avuti
            
            
    $url $login_api_url.$app_name//trovare nuovo nome variabili
            
    $user_pwd $user_email.':'.$pwd;
            
    $curl curl_init($url); //cambiare nome variabile
            
    curl_setopt($curlCURLOPT_USERPWD$user_pwd); 
            
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
            
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
            
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
            
    $result curl_exec($curl);
            
    $result_e json_decode($result1); 
            
    curl_close($curl);
                    
            return 
    $result_e;
            
            }
        
        }

    $u1 = new UbuntuOne;

    $u1->issueTokens($u1->login_api_url"email""pass""appname");


    ?>
    Come vedete alla fine la funzione tira fuori un array, Io voglio che sia possibile stamparlo senza dover inserire print_r all'interno della funzione.

    Ho provato con print_r($u1->result_e); ma mi dice che result_e non è definita

  9. #9
    Ti dice che result_e non e' definita perche' result_e non e' una variabile di classe, ma e' privata del metodo issueTokens.

    Prova con:
    Codice PHP:
    $result $u1->issueTokens($u1->login_api_url"email""pass""appname");
    print_r($result

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Sono andato un po' avanti col lavoro e mi sono sorti dei seri dubbi sulla mia implementazione dell'oop, è la prima volta che lo uso e sono un po' disorientato.

    Praticamente vorrei creare una classe (o più) che mi permetta di gestire varie azioni (dal log in con oauth alla creazione di file) tramite le api di un servizio chiamato Ubuntu One.

    Dopo aver creato una funzione per il login ho cominciato a crearne una per prendere le info su un certo account; in questa seconda funzione utilizzo una variabile che viene definita nella prima e quindi mi dà un errore fatale.

    Codice PHP:
    <?php

    class UbuntuOne//dovrebbe richiedere user, pass e app_name

        
    const login_api_url 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20';
        const 
    login_api_tell_url 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/';
            
        public function 
    getTokens($login_api_url$login_api_tell_url$user_email$pwd$app_name) { //ci dovrebbe essere controllo se token già avuti
            
            
    $url self::login_api_url.$app_name//trovare nuovo nome variabili
            
    $user_pwd $user_email.':'.$pwd;
            
    $curl curl_init($url); //cambiare nome variabile
            
    curl_setopt($curlCURLOPT_USERPWD$user_pwd); 
            
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
            
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
            
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
            
    $result curl_exec($curl);
            
    $result_d json_decode($result1); 
            
    curl_close($curl);
                    
            
    $conskey $result_d['consumer_key'];
            
    $conssec $result_d['consumer_secret'];
            
    $token $result_d['token'];
            
    $secret $result_d['token_secret'];
            
    $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
            
    $oauth->enableDebug();
            
    $oauth->enableSSLChecks();
            
    $oauth->setToken($token,$secret);
            
            
    $tellurl self::login_api_tell_url.$user_email;
            
    $oauth->fetch($tellurl);
            
    print_r($oauth->getLastResponse());
            
            
            }
            
        public function 
    getAccountInfo(){
            
            
    $info $oauth->fetch("https://one.ubuntu.com/api/account/");
            
            
    $info_d json_decode($info);        
            
            return 
    $info_d;
            
            
            }

        
        
        }

    $u1 = new UbuntuOne;

    $connect $u1->getTokens($u1::login_api_url$u1::login_api_tell_url"mail""Pass""try2");

    $infoacc $u1->getAccountInfo();

    print_r($infoacc);



    ?>
    Ora credo che tutto sia dovuto al fatto che la mia implementazione della classe non sia corretta. Mi potreste dare una mano ad impostarla diversamente?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.