Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Gunn
    Registrato dal
    Feb 2006
    Messaggi
    370

    PHP5 OOP: passare automaticamente delle variabili....

    ...... come argomenti di una funzione di una classe senza specificarle alla creazione dell'oggetto: si può?

    ciao a tutti, il ponte mi ha concesso il lusso di mettermi a guardare php5 ( fino alle php5:00 del mattino ), io non ho mai programmato ad oggetti ma devo dire che è invitante, devo solo entrare bene nel meccanismo
    qualcuno mi può aiutare con questo problema?

    vorrei fare
    (queste sono variabili esterne ad ogni classe e incluse in un file)

    $config['mysql']['server'] = ;
    $config['mysql']['username'] = ;
    $config['mysql']['password'] = ;
    $config['mysql']['database'] = ;


    class database
    {
    public function __construct($array_interno = $config) [???]
    {


    per avviare un nuovo oggetto così:

    $database = new database();

    anzichè scrivere

    $database = new database($config);

    si potrà fare?

    grazie 1000 in anticipo!!!

  2. #2
    una cosa del genere...?

    Codice PHP:
    class database {
        private 
    $c_db_host 'localhost';
        private 
    $c_db_user 'username';
        private 
    $c_db_pass 'password';
        private 
    $c_db_name 'dbname';
        
        public 
    $dbHandle;
        
        function 
    __construct() {
            
    $this->dbHandle $this->Connect();
        }
        
        private function 
    Connect() {
            
    $dblink mysql_connect($this->c_db_host$this->c_db_user$this->c_db_pass) or die("Connessione al DB non riuscita");
            
    mysql_select_db($this->c_db_name) or die("Selezione del database non riuscita");
            return 
    $dblink;
        }

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  3. #3

    Re: PHP5 OOP: passare automaticamente delle variabili....

    Originariamente inviato da Gunn
    ...... come argomenti di una funzione di una classe senza specificarle alla creazione dell'oggetto: si può?

    ciao a tutti, il ponte mi ha concesso il lusso di mettermi a guardare php5 ( fino alle php5:00 del mattino ), io non ho mai programmato ad oggetti ma devo dire che è invitante, devo solo entrare bene nel meccanismo
    qualcuno mi può aiutare con questo problema?

    vorrei fare
    (queste sono variabili esterne ad ogni classe e incluse in un file)

    $config['mysql']['server'] = ;
    $config['mysql']['username'] = ;
    $config['mysql']['password'] = ;
    $config['mysql']['database'] = ;


    class database
    {
    public function __construct($array_interno = $config) [???]
    {


    per avviare un nuovo oggetto così:

    $database = new database();

    anzichè scrivere

    $database = new database($config);

    si potrà fare?

    grazie 1000 in anticipo!!!

    codice:
    class database{
    
    public function __construct(&$array_interno){
    }
    
    [...]
    }
    
    $DB = new Database(&$config['mysql']);
    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  4. #4
    Manuel s.
    il tuo metodo non permette l'invio di un array differente da quello interno


    ringhio:
    questa:
    $DB = new Database(&$config['mysql']);
    è deprecata da tempo, in PHP si riceve solo per riferimento, non si invia per riferimento

    se la classe ha questo costruttore:

    function Database(&$array) { ... }

    si può istanziare solo con una var già assegnata e non serve, quindi, inviare per riferimento poichè la var sarà usata già per riferimento

    new Database($myArray);
    // myArray è presa per riferimento, ergo se si cambia dentor il costruttore cambia anche fuori






    Gunn =>
    function __construct($array_interno = $config)
    non è un metodo valido di overload, devi usare un dato statico e non una variabile ... quindi questo:


    codice:
    function __construct(
    	$array_interno = array(
    		'mysql' => array(
    			'server' => 'host',
    			'username' => 'root',
    			'password' => 'pass',
    			'database' => 'test'
    		)
    	)
    ) {
    	// ...
    }
    è l'unico modo per replicare esattamente quello che volevi fare
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di Gunn
    Registrato dal
    Feb 2006
    Messaggi
    370
    Originariamente inviato da andr3a
    codice:
    function __construct(
    	$array_interno = array(
    		'mysql' => array(
    			'server' => 'host',
    			'username' => 'root',
    			'password' => 'pass',
    			'database' => 'test'
    		)
    	)
    ) {
    	// ...
    }
    è l'unico modo per replicare esattamente quello che volevi fare
    bella fregatura!

    ma è una mancanza di php oppure questa cosa che ho scritto è priva di logica?
    ossia caricare variabili esterne per default senza specificarle quando crei l'oggetto?
    non è per caso che nelle classi funziona l'array $GLOBALS?
    mi secca un po' spostare le configurazioni dentro le classi, a questo punto preferisco usare
    $oggetto = new database($config);
    però non mi va giù!
    e se mettessi le configurazioni DENTRO un'altra classe, dalla classe database potrò richiamarle senza problemi?

    grazie a tutti!

  6. #6
    è un problema di concetto di overload e non una fregatura del php ... se ti serve un valore di default questo deve essere statico, se ti serve una variabile di configurazione scrivere
    $oggetto = new database($config);

    è la cosa più normale e naturale che ci sia ... a prescindere dal linguaggio

    questo ti permette di configurare quella variabile in un file invece di modificare il costruttore della classe
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente di HTML.it L'avatar di Gunn
    Registrato dal
    Feb 2006
    Messaggi
    370
    ok afferrato adesso ho un altro problema, diciamo che devo usare questa classe da dentro un'altra classe, come faccio? (ditemi anche se la logica di questa classe è corretta)

    Codice PHP:
    class database
    {
        private 
    $connessione;
        
        public function 
    __construct($config)
        {
            
    $this->connessione mysql_connect($config['mysql']['server'], $config['mysql']['username'], $config['mysql']['password']);
            
    mysql_select_db($config['mysql']['database'], $this->connessione);
        }

        public function 
    query($query)
        {
            
    $query mysql_query($query$this->connessione);
            return 
    $query;
        }

        public function 
    fetch($query)
        {
            
    $query mysql_fetch_assoc($query);
            return 
    $query;
        }

        public function 
    __destruct()
        {
            
    mysql_close($this->connessione);
            unset(
    $this->connessione);
        }

    chiedo scusa per queste domande con risposta scontata ma sicuramente siete d'accordo che capire la logica dell'oop all'inizio non è semplice...

    attendo vostri preziosissimi e gentilissimi lumi

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 © 2026 vBulletin Solutions, Inc. All rights reserved.