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

    Visualizzare variabile della classe principale

    salve, ho una classe principale ed una estesa fatte in questo modo:

    Codice PHP:
    class main{
      public 
    $pageTitle;

      public function 
    setTitle($string){
        
    $this->pageTitle=$string;
        return;
      }

      public function 
    getTitle(){
        echo 
    $this->pageTitle;
        return;
      }
    }

    class 
    page extends main{
      public function 
    title(){
        
    $title="Titolo";
        
    $this->setTitle($title);
      }

    queste due classi sono incluse nel file index.php

    Codice PHP:
    <?php
    include ("main.class.php");
    $main=new main();
    include (
    "page.class.php");
    $page= new page();

    includo il template
    include ("template.php");
    ?>
    all'interno del file template.php richiamo la funzione getTitle() in questo modo:

    Codice PHP:
    <?php
    $main
    ->getTitle();
    ?>
    ma non mi visualizza niente a schermo. Come posso risolvere?

  2. #2
    escludendo il fatto che in quel codice che hai postato non c'è nessun richiamo alla funzione page::title e che quindi "main"::setTitle non è stato mai richiamato e quindi un getTitle non ti ritorna nulla, ma hai idea, anche minima, di cosa voglia dire che una classe ne estende un'altra e come si usa tale cosa? Perché, e lo dico a te perché non sei il primo che commette lo stesso errore, non è mica che instanziando due classi, la main e la page, e operando sulla page, allora viene alterato lo stato di main, si altera solo lo stato di page. Estendere una classe non vuol dire che due instanze saranno legate tra di loro per sempre, ma vuol dire che la classe che estende eredita tutti i metodi e proprietà pubblici/protetti della classe madre e in più aggiunge/modifica (se vuole) comportamenti.

    Tanto per fare un esempio:

    Codice PHP:

    class Lavoratore{

    public function 
    descriviti(){
     return 
    "Io sono ".$this->myJob();
    }

    public function 
    myJob(){
    return 
    "un lavoratore";
    }
    }

    class 
    Avvocato extends Lavoratore{

    public function 
    myJob(){
    return 
    "un avvocato";
    }
    }


    //allora avrai che il seguente codice:
    $avvocato = new Avvocato(); //nota che instanzio prima un oggetto Avvocato di Lavoratore 
    echo $avvocato->descriviti(); //nota che nella classe Avvocato non è definito direttamente un metodo "descriviti" ma lo eredita dalla classe madre

    $lavoratore = new Lavoratore();
    echo 
    $lavoratore->descriviti();

    //otterrai in output:
    //Io sono un avvocato
    //Io sono un lavoratore 
    Chiaro?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Quello che ho scritto è un codice di esempio, l'ho riscritto per non postare tutta la classe, ed ho dimenticato il richiamo alla funzione, comunque viene richiamata nello script originale.
    Lo so a cosa servono le classi estese, tranquillo, mi era chiaro anche prima del tuo esempio

  4. #4
    Comunque ecco il secondo pezzo di cosice con la chiamata alla funzione title()

    Codice PHP:
    <?php 
    include ("main.class.php"); 
    $main=new main(); 
    include (
    "page.class.php"); 
    $page= new page(); 
    $page->title();

    includo il template 
    include ("template.php"); 
    ?>

  5. #5
    nessuna soluzione? non riesco a risolvere
    se richiamo la funzione getTitle() all'interno della funzione title() funziona, mentre se la richiamo all'interno del template in questo modo $main->getTitle(); non funziona.

    se scrivo all'interno del file template.php

    Codice PHP:
    var_dump($this->pageTitle); 
    mi restituisce NULL

  6. #6
    Non riesco a capire perchè la variabile risulta vuota.

  7. #7
    nel file template fai
    Codice PHP:
    $page->getTitle(); 
    Cmq devi un pò prendere dimestichezza con la sintassi OOP e l'ereditarietà delle classi.

    Se questo che stai facendo ha scopo di fare prove/test "didattici" sono ottimi.

    PS: seppur ci sono margini di soggettività, dal punto di vista lessicale apporterei delle modifiche. Io ti consiglierei di usare tre tipologie di metodi getXX, setXX, printXX:
    Codice PHP:
    class main
      public 
    $pageTitle

      public function 
    setTitle($string){ 
        
    $this->pageTitle=$string
        return; 
      } 

      public function 
    getTitle(){ 
        return 
    $this->pageTitle
      } 

      public function 
    printTitle(){ 
        if(!
    $this->pageTitle) echo $this->pageTitle
        return;
      } 

    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    Codice PHP:
    $page->getTitle(); 
    l'ho fatto nel file index e poi ho incluso il template:


    Codice PHP:
    <?php  
    include ("main.class.php");  
    $main=new main();  
    include (
    "page.class.php");  
    $page= new page();  
    $page->title(); 

    includo il template  
    include ("template.php");  
    ?>

  9. #9
    No.

    Nel file index.php hai fatto.

    Codice PHP:
    $page->title(); // metodo che nella tua classe setta il titolo 
    Nel codice postato inizialmente di template.php avevi fatto
    Codice PHP:
    $main->getTitle(); // diverso da $page->getTitle(); 
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  10. #10
    ma la funzione getTitle() è nella classe main e non in quella page, è possibile richiamarla nel template tramite $main->getTitle() ????
    Faccio un riepilogo, prima ho fatto qualche errore e non mi sono fatto capire bene

    main.class.php

    Codice PHP:
    class main
      public 
    $pageTitle

      public function 
    setTitle($string){ 
        
    $this->pageTitle=$string
        return; 
      } 

      public function 
    getTitle(){ 
        echo 
    $this->pageTitle
        return; 
      } 

    page.class.php

    Codice PHP:
    class page extends main
      public function 
    title(){ 
        
    $title="Titolo"
        
    $this->setTitle($title); 
      } 

    index.php

    Codice PHP:
     <?php 
    include ("main.class.php"); 
    $main=new main(); 
    include (
    "page.class.php"); 
    $page= new page(); 
    $page->title();

    //includo il template 
    include ("template.php"); 
    ?>
    vorrei richiamare nel file template.php la funzione getTitle() o almeno stampare a schermo la variabile $pageTitle senza usare l'istanza della classe page ma solo main

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.