Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    oggetti accessibile ovunque?

    mi piacerebbe poter definire oggetti accessibili ovunque: dentro le funzioni, nelle classi, nei metodi, etc.

    oggetti che magari racchiudano tutte le impostazioni del sito
    echo config::title; // "il mio bel sito"

    oppure oggetti singleton relativi al database, alla sessione, all'utente, ...
    echo session:ermessi; // array

    ecco le soluzioni che finora ho trovato:
    1) globalizzo con "global" - noioso
    2) uso una funzione statica tipo getInstance - noioso
    3) creo una classe con constati - forse il migliore ma le costanti non possono essere array!

    insomma, riassumo il problema:
    poter scrivere, ovunque mi trovi (funzioni, classe, ... ) config::impostazione oppure db->miometodo(); senza dover ricorrere a global, trucchi o cose

    possibile che non possa definire globale (davvero) una variabile?
    si vivono molte vite e si muore una volta sola

  2. #2
    $_SESSION["variabili"]["var1"] = "valore1";
    $_SESSION["login"]["user"] = "cane";
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  3. #3
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    stai attento a non mettere troppo in sessione.

    Ad esempio, se vuoi avere le info del tuo utente loggato, valuta se vale la pena mettere l'oggetto utente in sessione oppure se vale la pena di salvare in sessione solo l'id dell'utente e in ogni pagina recuperare i dati ad esso collegati.

    Non esiste una regola di comportamento in questi casi, in linea di massima evita di mettere 10 oggetti corposi in sessione, visto che comunque quando sono in sessione vengono serializzati e scritti su un file.

    p.s.
    ricorda di includere i file contenenti le classi che andranno in sessione prima di lanciare il session_start.

    ciao

  4. #4
    grazie per le risposte, ma il mio problema non sono le sessioni. vi prego di leggere piu' attentamente il mio post

    vorrei accedere ad una variabile definita nel corpo del software anche nelle funzioni e nei metodi delle classi. senza utilizzare global, getInstance and company
    si vivono molte vite e si muore una volta sola

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Io ho risolto creando variabili statiche di oggetti.
    Ok sono modificabili pero' va da se che non le devi modificare.


    Diversametne se le vuoi proprio blindare l'unica opzione che hai e' quella di creare variabili statiche private
    e metodi relativi di get anchessi statici.


    tipo
    Codice PHP:
    class MyGlobal {
            private static 
    $globalValue = array(1,2,3,4,5);

            public static 
    $getGlobalValue() {
                  return 
    MyGlobal::$globalValue;
            }

    }


    $value MyGlobal::$getGlobalValue(); 

    Andrea

  6. #6
    vuoi che:

    $a = 1;

    function ciao(&$variabile)
    {
    $variabile++;
    }

    ciao($a);

    echo $a; // 2

    ????????????

    se sì, basta che metti & e ogni modifica all'interno della funzione si rispecchia fuori...

    Così ti dichiari una variabile e te la passi così...
    Poi non so cosa devi fare e perchè devi modificare una variabile in + classi o funzioni.. però se sei contento così
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  7. #7
    andreamk....grazie grazie grazie...!!!
    praticamente incappavo in una ignoranza sintattica. non sapevo infatti che per accedere a variabili statiche si usava il dollaro ( classe::$miavar ) e mi ostinavo a fare le prove alla maniera delle costanti ( classe::miavar ).

    riassumo con un altro esempio, così da facilitare la comprensione a chi incapperà nel mio stesso problema:

    Codice PHP:
    class config
    {
      static 
    db = array( 'local''root''miapass''miodb' );
      static 
    title "il mio bel sito";
    }

    // uso all'interno di una funzione
    function connetti()
    {
      
    $dati_per_connettersi config::$db;

    se poi uno vuole bloccare l'accesso/modifica alle variabili nel config, vedi la soluzione di andreamk
    si vivono molte vite e si muore una volta sola

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    prego prego prego

    ho fatto un errore pero
    le varaibili statiche vanno chiamate col dollaro i metodi no quindi il mio esempio
    corretto e' ...

    Codice PHP:
    class MyGlobal {
            private static 
    $globalValue = array(1,2,3,4,5);

            public static 
    $getGlobalValue() {
                  return 
    MyGlobal::$globalValue;
            }

    }

    $value MyGlobal::getGlobalValue(); 
    Andrea

  9. #9
    @dogeht

    è la cosa più assolutamente (che non si può dire :lol: ) sbagliata si possa volere

    infatti questo ti tronca a priori la riusabilità ma anche il refactoring del codice viene considerevolmente complicato!

    se domani vuoi cambiare il nome alla classe? ti toccherà stravolgere qualsiasi parte del codice ... invece una variabile che instanzia quell'oggetto che viene poi passato in giro evita molti più problemi!

    Inoltre il codice statico è sconsigliato anche per un altro motivo ... la leggibilità del codice ... infatti mentre hai la possibilità di seguire con facilità la trafila che fa una data variabile per arrivare da una parte con il codice statico no ... può essere settato da un pezzo di codice, variato da un altro, e letto da un altro ancora

  10. #10
    quando uso una classe, io uso molto variabili protected e private in una classe generica, tipo

    Codice PHP:
    class Utils {
      private 
    $host;
      private 
    $user;
      private 
    $password;
      private 
    $database;

      function 
    __construct() {
        
    $this->host "localhost";
        
    $this->user "username";
        
    $this->password "password";
        
    $this->database "nome_db";
      }

    da un'altra classe poso utilzizare tutto quanto contenuto in UTILS estendendola:

    Codice PHP:
    class UsaDB extends Utils {

      function 
    __construct() {
          
    // chiama _construct di Utils
          
    parent::__construct();
        }

      function 
    ApriConnessione() {
        
    // visto che programmiamo ad oggetti usiamo mysqli che è meglio...
        
    $mysqli = new mysqli($this->host$this->user$this->password$this->database);
        return 
    $mysqli;
      }

    quindi da una pagina PHP per usare ApriConnessione basta

    Codice PHP:
    <?php
       
    require_once 'Utils.php';
       require_once 
    'UsaDB.php';

       
    $usaDB = new UsaDB();

      
    $conn $usaDB->ApriConnessione();
    ?>

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.