Visualizzazione dei risultati da 1 a 9 su 9

Discussione: estendere classi

  1. #1
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281

    estendere classi

    Ciao a tutti.

    Sto usando da poco le classi in php4 e ho subito un problema.

    Ho una classe per la connessione al db, la gestione delle query ecc. che viene usata in uno script prova.php.
    Codice PHP:
    include "db.class.php";

    $db = new dbClass($user,$pass,$dbname,$dbhost);
    $q  $db->query("select * from tabella");
    .
    .

    Tutto funziona tranquillamente. Ora, sempre nello stesso script prova.php voglio usare un'altra classe per creare sessioni che all'interno fa operazioni col db.

    Vorrei sapere se devo estendere la classe sessioni alla classe db per farle vedere i metodi necessari?

  2. #2

    Re: estendere classi

    Originariamente inviato da pgm


    Vorrei sapere se devo estendere la classe sessioni alla classe db per farle vedere i metodi necessari?
    si esatto

    Codice PHP:
    class Sessioni extends Database
    {
      \\ 
    codice


    se posso chiederti, la classe di gestione del db come l'hai organizzata?
    perché io volevo fare la stessa cosa, ma dopo dieci righe mi sono perso perché avevo troppe variabili da definire (SQLite, postgreSQL, mySQL...), per poi scoprire che la classe PDO ( solo da php5 ) fa quello di cui avevo bisogno e quindi stavo sprecando tempo

    Tu hai gestito i vari tipi di db o l'hai fatto per mySQL? giusto per capire che ragionamento hai fatto per vedere come avrei potuto risolvere anche io.








    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  3. #3
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    ho provato in questo modo:
    Codice PHP:
    //file prova.php
    include "db.class.php";
    include 
    "session.class.php";

    $db = new dbClass($user,$pass,$dbname,$dbhost); 
    $sess = new sessClass($db); 
    Nella classe session.class.php
    Codice PHP:
    class sessClass{

        
    //costruttore
        
    function sessClass($db){
              
    //settaggi vari
              
    .
              .
              
    $this->session_mysql $db;
         }

    anche così nei vari metodi di sessClass, non riesco a fare una query, nonostante non abbia errori.

    Questo è il metodo giusto?

  4. #4
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281


    In pratica uso una classe per db presa in rete. me la voglio studiare bene e capire come funzionano le classi.
    il core è una layer che viene esteso per mysql, oracle, ecc.

    Ritornando al problema, anche estendendo la classe delle sessioni non succede nulla. ne errore ne query.

  5. #5
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    Altra cosa.

    Se estendo la classe session devo inizializzare la classe due volte?
    Cioè una all'interno del mio file prova.php e una all'interno della classe?

    Esempio nel solito file prova.php
    Codice PHP:
    include "db.class.php";
    include 
    "session.class.php";

    $db = new dbClass($user,$pass,$dbname,$dbhost);
    //query qualsiasi
    $q  $db->query("select * from tabella"); 
    //voglio creare una sessione
    $sess = new sessClass(); 
    file session.class.php
    Codice PHP:
    class sessClass extends dbClass
        
        
    //costruttore 
        
    function sessClass($db){ 
              
    //settaggi vari 
              

              . 
              
    //???????
              
    $this->$db = new dbClass($user,$pass,$dbname,$dbhost);
         } 


  6. #6
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281


    inizializzando un'altra volta la classe dbClass all'interno si sessClass funziona.

    Però vorrei sapere se è il modo corretto. infatti alla fine faccio 2 connessioni al db e la cosa mi scoccia un pò.

    Come posso passare solo il riferimento innvece di estendere le classe?


  7. #7
    inzializzare due volte la classe non mi sembra la soluzione ottimale, poi sicuramente troverò qualcuno che smentisce


    io per quel che mi riguarda ho fatto così per una gestione news.
    ho fatto la classe Database (database.class.php) e una classe News (news.class.php) extends Database, poi ho fatto un file unico in cui mi dichiaro l'oggetto news e tramite quello accedo sia ai metodi della classe News che della superclasse, semplicemente facendo così:
    Codice PHP:
    require_once("classes/class.database.php");
    require_once(
    "classes/class.news.php");

    $news=new News();

    $news->AddNews("parametri"); // metodo classe News
    $news->EseguiQuery(); // metodo classe Database 
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    grazie

    ma questo è un caso particolare. ma se tu volessi creare una query fuori dal contesto delle news come fai?
    la classe per il db mi serve sia per le sessioni che per il login che per la paginazione ecc.

    Non voglio inizializzare la classe db all'interno della classe session.

    Certo che non va bene inizializzare 2 volte il db, ci mancherebbe

    So che c'è il modo di passare solo il riferimento alla classe e non estenderla, ma non so come fare esattamente.

  9. #9
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    Sono proprio un minchionnne mi ero perso in un bicchiere d'acqua.

    Ho passato il riferimento alla classe senza estendere.
    Codice PHP:
    //prova.php 
    include_once "db.class.php"
    include_once 
    "session.class.php"

    $db = new dbClass(parametri);
    $sess = new sessClass(parametri$db); 
    Codice PHP:
    //session.class.php
    class sessClass extends dbClass
         
        
    //costruttore 
        
    function sessClass($db){ 
              
    //settaggi vari 
              

              . 
              
    //??????? 
              
    $this->session_mysql $db
         


         function 
    metodo(){
              
    //settaggi vari
              
    $this->session_mysql->query("....");
         }

    Tutto funziona (almeno per ora ) all'interno dei metodi della classe.

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.