Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    34

    Errore nel richiamare un metodo da una classe.

    Salve,
    ho da poco iniziato a studiare php e su un libro ho trovato lo script della seguente classe:

    Codice PHP:
    <?php 

    class DBManager
    {
    private static 
    $s_conn;

    public static function 
    getConnection()
      {
        if (
    DBManager::$s_conn === NULL)
        {
          
    $conn = @new mysqli(DB_HOSTDB_USERDB_PASSDB_DBASE);
          if (
    mysqli_connect_errno() !== 0)
          {
            
    $msg mysqli_connect_error();
            throw new 
    DatabaseErrorException($msg);
          }
          @
    $conn->query('SET NAMES \'utf8\'');
          
    DBManager::$s_conn $conn;
        }
        return 
    DBManager::$s_conn;
      }


    public function 
    mega_escape_string
      
    (
        
    $in_string,
        
    $in_markup FALSE
      
    )
      {
        if (
    $in_string === NULL)
          return 
    '';

        
    $str ereg_replace('([\'%;])''\\\1'$in_string);
        if (
    $in_markup == TRUE)
        {
          
    $str htmlspecialchars($strENT_NOQUOTES,
              
    "UTF-8");
        }

        return 
    $str;
      }
    }
    ?>
    In ul altro script il metodo public function mega_escape string viene richiamato in questo modo:
    Codice PHP:
      public function userNameExists($in_uname)
      {
        if (
    $in_uname === NULL or trim($in_uname) == '')
          throw new 
    MyInvalidArgumentException('$in_uname');

        
    $conn DBManager::getConnection();

        
    $uname DBManager::mega_escape_string($in_uname);

        
    $query = <<<EOQUERY
    SELECT username, user_id FROM Users
      WHERE username = '
    $uname'
    EOQUERY;


        
    $results = @$conn->query($query);
        if (
    $results === FALSE or $results === NULL)
          throw new 
    DatabaseErrorException($conn->error);

        if (
    $results->num_rows == 0)
        {
          
    $results->close();
          return -
    1;
        }
        else if (
    $results->num_rows == 1)
        {
          
    $row = @$results->fetch_assoc();
          
    $results->close();
          return 
    $row['user_id'];
        }
        else
        {
          
    $results->close();
          throw new 
    InternalErrorException('Multiple users with same name');
        }
      } 
    Ma quando richiamo il metodo mega_escape_string mi da un errore per il fatto che lo sto facendo come fosse un metodo statico.
    Come si richiama un metodo pubblico dall'esterno? Se uso -> Netbeans mi dice che sto facendo un errore.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Non so che libro tu stia usando ma ti consiglio vivamente di dargli fuoco.
    Entrambe le cose che dici sono corrette nel senso che :: e -> sono gli operatori per richiamare dei metodi.
    Il primo fallisce perchè il metodo non è definito come statico, il secondo fallisce perché la l'oggetto non è stato istanziato tramite l'operatore new.

    Il tuo codice andrebbe cambiato completamente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    34
    Grazie.
    Avevo intuito una cosa del genere. Ma se dichiaro il metodo come statico, quindi risolvo.

  4. #4
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Si se dichiari il metodo come statico risolvi ma lo faresti nel modo sbagliato, nell'esempio il vero errore è che tutto è stato usato come statico quando non avrebbe dovuto, per questo ti ho consigliato di cambiare libro :-)

    La soluzione giusta è riscrivere il codice in modo appropriato. Metodi statici vanno usati con parsimonia ed in contesti molto specifici a mio avviso.

  5. #5
    Originariamente inviato da _debo
    Non so che libro tu stia usando ma ti consiglio vivamente di dargli fuoco.
    quoto stavo per dare lo stesso consiglio
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    34
    Originariamente inviato da whisher
    quoto stavo per dare lo stesso consiglio
    Ok, avete qualche titolo da consigliare?

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.