Visualizzazione risultati 1 fino 5 di 5

Discussione: Problema di ritorno Valore

  1. #1
    Guest

    Predefinito Problema di ritorno Valore

    ciao, ho da poco iniziato con il php e con l'OOP, quindi ho deciso di unire le due cose, ma ho un "problemino" con l'output. Come viene gestito il valore tornato da una funzione (tramite return) all'interno di echo? Mi spiego meglio. Questo codice non mi da l'output che voglio, ma non capisco perchè
    Codice:
    <?php
    class lampadina {
    	var $st;
    	function status() {
    		return $this->st;
    	}
    	function on() {
    		$this->st = 1 ;
    	}
    	function off() {
    		$this->st = 0 ;
    	}
    	function lampadina() {
    		$this->st=1;
    	}
    }
    
    
    
    $lamp = new lampadina;
    
    if ($lamp->status())
    	echo "La lampadina e' inizialmente accesa<br>";
    else
    	echo "La lampadina e' inizialmente spenta<br>";
    echo "$lamp->st (appena creata)<br>";
    $lamp->off();
    echo "Ho appena spento la lampadina, infatti \$lamp->status() = ",$lamp->status()," <br>";
    echo "$lamp->st <br>";
    $lamp->on();
    echo "Adesso dovrebbe essere accesa, \$lamp->status() = $lamp->status() <br>";
    echo "$lamp->st <br>";
    
    ?>
    produce il seguente output
    Codice:
    La lampadina e' inizialmente accesa
    1 (appena creata)
    Ho appena spento la lampadina, infatti $lamp->status() = 0
    0
    Adesso dovrebbe essere accesa, $lamp->status() = ()
    1
    Come vedete nel penultimo echo ho provato a incapsulare nell' echo la funzione, aspettandomi che il valore di ritorno venisse trattato come una variabile ( ==> risolto ) ma mi vengono in output le parentesi tonde che sono quelle della chiamata di funzione.

    Qualche aiutino?

  2. #2
    Guest

    Predefinito

    tralasciando che la funzione status() è inutile, visto ti ritorna una var che puoi tranquillamente consultare con $lamp->st

    Il tuo problema è che viene interpretato $variabile+() e non funzione()...
    Devi usare o la concatenazione o mettere il contenuto di ritorno dalla funzione in una variabile.

    la sintassi corretta è:
    Codice:
    echo "Adesso dovrebbe essere accesa, \$lamp->status() = " . $lamp->status() . " <br>";

  3. #3
    Guest

    Predefinito

    che la funzione era inutile lo sapevo, sto studiando dal principio quete cose, è solo per provare... ;-)
    Quindi il mio sospetto era corretto, le funzioni che ritornano un valore sono trattate diversamente dalle variabili.
    Grazie

  4. #4
    Guest

    Predefinito

    ho di nuovo un problema di output, stavolta con una cosina un po' + complessa...
    Codice:
    <?php
    include ("lampadine.php");
    
    class lampadario {
    	var $tante;
    	var $quanti;
    	function lampadario ( $x = 1 ) {
    		$quanti = $x;
    		for ( $i = 0 ; $i < $x ; $i++ ) 
    			$this->tante[$i]= new lampadina;
    	}
    	
    	function print_status () {
    		for ( $i = 0 ; $i < $this->quanti ; $i++)  {
    			echo $this->tante[i]." ";
    			}
    		echo "\n";
    	}
    }
    
    $uno= new lampadario;
    echo "Adesso vediamo il lampadario \$uno: ";
    $uno->print_status();
    $cinque= new lampadario(5);
    echo "\$cinque: ";
    $cinque->print_status();
    $cinque->tante[2]->off();
    echo "\$cinque (dopo): ";
    $cinque->print_status();
    ?>
    in lampadine.php c'è solamente la classe del post di sopra. Adesso ho il problema che la funzione print_status() non printa un bel niente
    Codice:
     php lamp+.php
    Adesso vediamo il lampadario $uno:
    $cinque:
    $cinque (dopo):
    Grazie ancora a chi mi da una mano..... :eyes:

  5. #5
    Guest

    Predefinito

    $uno->quanti non è definito.
    Per assegnargli un valore devi usare la sintassi $this->quanti = $x; e non $quanti = $x;
    Poi qui c'è un errore di sintassi:
    echo $this->tante[i]." ";
    ($i non i)
    Infine $uno->tante[$i] sono oggetti ... che voi che ti scriva?
    Ultima modifica di Inverno : 06-08-2005 alle ore 15.20.36

Regole di scrittura

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