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

    Oggetto di una classe dentro altra classe

    Salve, sto creando uno script con una classe principali e due classi estese:

    class main{}
    class login extends main{}
    class admin extends main{}

    Nel file index.php ho istanziato tutte e tre le classi:

    $main= new main();
    $login= new login();
    $admin=new admin();

    ma quando provo a chiamare un metodo della classe login all'interno della classe admin ricevo i seguenti errori:

    Notice: Undefined variable: login in ........
    Fatal error: Call to a member function showUsername() on a non-object in ....

    Non riesco a capire qual'è il problema.
    Vi ringrazio per l'attenzione.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Posta un po' di codice del punto dove hai il problema e mettilo tra i tag [php]

  3. #3
    Ok, questa è la riga incriminata ed è all'interno della classe admin.class.php:
    Codice PHP:
    $this->adminTitle="Profilo utente: ".$login->showUsername(); 
    questa è la funzione showUsername():


    Codice PHP:
        public function showUsername(){
            
    $this->dbConnect();
            
    $sql "SELECT userUsername FROM ".TBLUSER." WHERE userID=$_SESSION[userID]";
            
    $res mysql_query($sql,$this->conn);
            
    $row mysql_fetch_array($res);
            
    $this->dbClose($this->conn);
            return 
    $row['userUsername'];
        } 
    Ecco la struttura delle cartelle:

    index.php
    login.class.php
    main.class.php
    admin
    --index.php
    --admin.class.php

    il file main.class.php è fatto in questo modo:
    Codice PHP:
    <?php
    class main{
    ...
    ...
    }
    require (
    dirname(__FILE__) .'/login.class.php');
    ?>
    Il file index.php (contenuto nella directory admin) è fatto così:

    Codice PHP:
    <?php
    include "../main.class.php";
    include 
    "admin.class.php";

    $main=new main();
    $login= new login();
    $admin= new admin();

    ?>

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290

    Re: Oggetto di una classe dentro altra classe

    Originariamente inviato da piccions
    Salve, sto creando uno script con una classe principali e due classi estese:

    class main{}
    class login extends main{}
    class admin extends main{}

    ma quando provo a chiamare un metodo della classe login all'interno della classe admin ricevo i seguenti errori:
    admin estende main non login

  5. #5
    :-)
    Il problema è che admin dovrebbe estendere sia main che login, è possibile?

  6. #6
    Ecco il file index.php
    Codice PHP:
    <?php
    session_start
    ();
    error_reporting(E_ALL);
    //Includo la classe main
    include '../main.class.php';
    $main = new main();
    $login = new login();

     
    //Controllo utente
    if ((!$login->isLogged()) OR ($login->getUserLevel()<1)){
        echo 
    "Accesso negato! Effettua il login!";
        
    $login->loginForm();
        exit();
    }

    //Classe admin
    require ('admin.class.php');
    $admin = new admin();

    //modifica profilo
    require ('profile.php');

    //visualizzo il template
    include $page->getTemplate('back');

    ?>
    Il problema è che funziona fino alla riga

    Codice PHP:
    if ((!$login->isLogged()) OR ($login->getUserLevel()<1)){ 
    quindi la classe login funziona all'interno di index.php ma non funziona dentro alla classe admin.

  7. #7
    Originariamente inviato da piccions
    quindi la classe login funziona all'interno di index.php ma non funziona dentro alla classe admin.
    Essendo $login una variabile non globale è ovvio che sia così.

    Semplicemente devi eseguire una nuova istanza della classe login nel controller (se ha un uso intensivo) o nel metodo implicato.

    Codice PHP:
    <?php
    Class Admin{
    protected 
    $login;
    public 
    $adminTitle;

    public function 
    __construct(){
          
    // esegui istanza alla classe login
          
    $this->login = new login();
          }

    public function 
    XXXXXXXXXXXX(){ 
            
    $this->adminTitle="Profilo utente: ".$this->login->showUsername();
        }
    }
    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
    grazie mille!!!! funziona, ma adesso ho un nuovo problema:

    Warning: mysql_close(): 7 is not a valid MySQL-Link resource in .....

  9. #9
    Originariamente inviato da piccions
    Warning: mysql_close(): 7 is not a valid MySQL-Link resource in .....
    Andando ad intuito ti direi di fare:

    Codice PHP:
    $this->dbClose(); 
    Ma in realtà vi è un errato modo di gestire le connessione a mysql.

    PS: nel mio precedente messaggio ho scritto "controller" ma intendevo costruttore
    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
    perchè dici che è errato? fammi capire.
    Ecco le funzioni:
    Codice PHP:
        //connessione a mysql
        
    public function dbConnect() {
            
    $this->conn = @mysql_connect(HOSTUSERNAMEPASSWORD) OR die('Impossibile connettersi al database.
    Contatta l\'amministratore: ' 
    $this->getConfig('emailWebmaster'));
            @
    mysql_select_db(DBNAME$this->conn) OR die('Impossibile selezionare il database.
    Contatta l\'amministratore: ' 
    $this->getConfig('emailWebmaster'));
            return 
    TRUE;
        }
        
        
    //disconnessione da mysql
        
    public function dbClose() {
            
    mysql_close($this->conn);
        } 
    Io la connessione la chiudo in questo modo:

    Codice PHP:
    $this->dbClose($this->conn); 
    ma facendo così mi da lo stesso errore:

    Codice PHP:
    $this->dbClose(); 

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.