Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    185

    PHP e programmazione a oggetti, dove sbaglio?

    Sto facendo alcuni test per provare le caratteristiche della programmazione a oggetti in php4 (perche non ho ancora trovato hosting che forniscano php5); ma al primo test mi si é presentata subito un anomalia, e non capisco proprio dove sbaglio.


    Codice PHP:
    <?php

    class TextBox {
      var 
    $body_text "Clsse1";
      
    // Constructor function
      
    function __construct($text_in) {
        
    $this->body_text $text_in;
      }
      function 
    display() {
        print(
    "<TABLE BORDER=1><TR><TD>$this->body_text");
        print(
    "</TD></TR></TABLE>");
      }
    }


    class 
    TextBoxHeader extends TextBox
    {
      var 
    $header_text;

      
    // CONSTRUCTOR
      
    function __construct($header_text_in
                       
    $body_text_in) {
        
    $this->header_text $header_text_in;
        
    $this->body_text $body_text_in;
      }

      
    // MAIN DISPLAY FUNCTION
      
    function display() {
        
    $header_html 
          
    $this->make_header($this->header_text);
        
    $body_html $this->make_body($this->body_text);
        print(
    "<TABLE BORDER=1><TR><TD>\n");
        print(
    "$header_html\n");
        print(
    "</TD></TR><TR><TD>\n");
        print(
    "$body_html\n");
        print(
    "</TD></TR></TABLE>\n");
      } 

      
    // HELPER FUNCTIONS
      
    function make_header ($text) {
        return(
    $text);
      }
      function 
    make_body ($text) {
        return(
    $text);
      }
    }

    $test = new TextBoxHeader("Header Classe2" "Footer Classe2");
    $test->display();

    ?>
    Allora spiego il codice, dalla prima classe che col metodo display scrive Classe1, estendo una seconda classe che ridefinisce il metodo display, che scrive Header Classe2 e Footer Classe2 , poi istanzio un oggetto e chiamo il metodo display della seconda classe, ma mi scrive "classe1" che corrisponde al metodo display della prima.

    Mi sono spiegato un po contorto ma spero si capisc?
    chi mi sa spiegare dove sbaglio? grazie.

  2. #2
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    Provo io...secondo me è perchè nel php4 (come in altri linguaggi) il costruttore deve avere lo stesso nome della classe

    esempio

    codice:
    class pippo{
      function pippo(){
      }
    }
    quuindi di fatto quando costrusci l'istanza della classe derivata non ne richiami il costruttore (come neppure quello della classe base).
    L'effetto è che rimane $body_text = "Clsse1"
    Rinomina i costruttori e dovresti risolvere


  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    185
    Mi sa che hai ragione, in un articolo che parla delle differenze tra php4 e php5 ho trovato questo :

    In PHP4 il costruttore era già supportato, ma la il nome del
    metodo doveva corrispondere al nome della classe, in
    maniera simile ad altri linguaggi di programmazione
    In PHP5 la sinstassi è stata modificata
    Sintassi: __construct()
    Io infatti quel codice l'ho preso da un libro di php5, dove pero specificava le differenze tra il 4 e il 5, probbabilmente mi é sfuggito qualcosa.

    Stassera provo mantenendo lo stesso nome.

    maledetti gli hosting che non si decidono a fare l'upgrade al php5!!!

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.