Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-10-2010, 20:35   #1
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
[PHP]Fatal error: Using $this when not in object context

Come mai con questo codice ricevo l'errore
Fatal error: Using $this when not in object context in D:\Program Files\EasyPHP-5.3.2i\www\Mattyfog CMS\config.php on line 15 ?
Codice:
class Database {

	//impostazioni 
	private $nomeutente = "root";
	private $password = "";
	private $host = "127.0.0.1";
	private $database = "mattyfog_cms";
	private $prefisso = "cms_";
	//fine impostazioni
	
	public static function Connetti() {
		
		$mysqli = new mysqli($this->host, $this->nomeutente, $this->password, $this->database);
}
}
Grazie!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2010, 22:39   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Sarà mica che il metodo è statico?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2010, 06:22   #3
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2010, 18:49   #4
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ho controllato... E' una classe!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2010, 19:25   #5
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Ho controllato... E' una classe!
Penso che si riferisse a questo:
Quote:
public static function Connetti() {
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2010, 20:17   #6
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
No, l'errore si riferisce alla riga 15 che è quella della connessione mysqli.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2010, 22:15   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
No, l'errore si riferisce alla riga 15 che è quella della connessione mysqli.
Ma hai capito almeno che errore ti viene segnalato?
Secondo te un metodo statico come fa ad avere un riferimento a $this?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2010, 11:37   #8
kevinpirola
Member
 
Iscritto dal: Sep 2010
Messaggi: 102
infatti il problema viene segnalato sulla riga 15 perchè un metodo statico non può usare $this... ma ovviamente vale anche l'affermazione contraria, cioè che this non può essere usato in una classe statica, o cambi uno o cambi l'altro....
kevinpirola è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 16:13   #9
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ok, capito. Questo problema l'ho risolto ma ora ne ho un altro.
Fatal error: Call to a member function query() on a non-object in D:\Program Files\EasyPHP-5.3.2i\www\Mattyfog CMS\config.php on line 36
Codice:
<?php

class Database {

	//impostazioni 
	private static $nomeutente = "root";
	private static $password = "";
	private static $host = "127.0.0.1";
	private static $database = "mattyfog_cms";
	private static $prefisso = "cms_";
	private static $mysqli;
	//fine impostazioni
	
	public static function Connetti() {
		
		$mysqli = new mysqli(self::$host, self::$nomeutente, self::$password, self::$database);

		if (mysqli_connect_errno())
		{
			$mysqli = new mysqli(self::$host, self::$nomeutente, self::$password, self::$database);
			
			if (mysqli_connect_errno())
			{
				echo "Errore durante la connessione al DBMS: ".mysqli_connect_error();
				exit();
			}
		}
	}
	
	public static function Chiudi() {
		close();
	}

	public static function Query($query) {
		
		$result = self::$mysqli->query($query);
		return $result;
	}
}
Come posso risolverlo?
Grazie!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 16:25   #10
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Ma perchè stai usando tutti metodi statici?
La tua è una normalissima classe, dovresti abolire tutti gli static presenti nel codice.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 16:33   #11
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ma non esiste un modo per evitare di inizializzare la classe visto che tanto le variabili nella classe avranno sempre gli stessi valori?
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 16:41   #12
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Comunque faccio come mi dici
Edit: ho modificato la classe ma ho lo stesso errore di prima:
Codice:
<?php

class Database {

	//impostazioni 
	private $nomeutente = "root";
	private $password = "";
	private $host = "127.0.0.1";
	private $database = "mattyfog_cms";
	private $prefisso = "cms_";
	private $mysqli;
	//fine impostazioni
	
	public function Connetti() {
		
		$mysqli = new mysqli($this->host, $this->nomeutente, $this->password, $this->database);

		if (mysqli_connect_errno())
		{
			$mysqli = new mysqli($this->host, $this->nomeutente, $this->password, $this->database);
			
			if (mysqli_connect_errno())
			{
				echo "Errore durante la connessione al DBMS: ".mysqli_connect_error();
				exit();
			}
		}
	}
	
	public function Chiudi() {
		close();
	}

	public function Query($query) {
		
		$result = $this->mysqli->query($query);
		return $result;
	}
}

Ultima modifica di Mattyfog : 26-10-2010 alle 16:46.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 19:23   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Hai un debugger php a disposizione?
Hai provato a vedere cosa contiene $this->mysqli?
Ecco ti consiglio di indagare in quella direzione perchè ci sono evidenti errori nel tuo codice
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 20:19   #14
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Debugger? Uso Eclipse e Easy PHP (apache mysql5).
Come posso installare o usare un debugger?
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2010, 07:45   #15
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Debugger? Uso Eclipse e Easy PHP (apache mysql5).
Come posso installare o usare un debugger?
E' un pezzo che non uso più php ma io usavo il debugger con Netbeans.

Comunque usa sempre $this per le variabili d'istanza
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2010, 17:41   #16
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Capito
Ma è possibile creare una classe in un'altra classe? Se si come?
Intendo qualcosa del tipo
class Ciao {
classi Pippo {}
}
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 17:10   #17
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Ma non esiste un modo per evitare di inizializzare la classe visto che tanto le variabili nella classe avranno sempre gli stessi valori?
Non è vero, a meno che non vuoi inizializzare mysqli ogni volta che viene chiamato il metodo Query().

Così dovrebbe funzionare (devi usare $this->variabile sia per assegnare che per richiamare)
Codice PHP:
<?php

class Database {

    
//impostazioni 
    
private $nomeutente "root";
    private 
$password "";
    private 
$host "127.0.0.1";
    private 
$database "mattyfog_cms";
    private 
$prefisso "cms_";
    private 
$mysqli;
    
//fine impostazioni
    
    
public function Connetti() {
        
        
$this->mysqli = new mysqli($this->host$this->nomeutente$this->password$this->database);

        if (
mysqli_connect_errno())
        {
            
$this->mysqli = new mysqli($this->host$this->nomeutente$this->password$this->database);
            
            if (
mysqli_connect_errno())
            {
                echo 
"Errore durante la connessione al DBMS: ".mysqli_connect_error();
                exit();
            }
        }
    }
    
    public function 
Chiudi() {
        
close();
    }

    public function 
Query($query) {
        
        
$result $this->mysqli->query($query);
        return 
$result;
    }
}
EDIT: a parte che non ho capito perchè inizializzi due volte mysqli con gli stessi valori... se non funziona una volta non è che la volta dopo funziona

Ultima modifica di kk3z : 28-10-2010 alle 17:12.
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 18:01   #18
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Il mio "Capito" pensavo facesse intendere che avevo risorlto il problema. Comunque ho 2 domande:
1) è possibile dichiarare una classe dentro una classe?
2) una classe come questa è davvero poco sicura: chiunque conosca la struttura della classe potrebbe accedere al database e farci quello che vuole. Come ovviare a questo? L'unica idea che mi è venuta in mente è di passare i dati per la connessione al db alla classe e di non salvarli in essa
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2010, 22:54   #19
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Mannaggia a voi... Come farò a passare la notte davanti al pc se non mi rispondete??
Scherzo, grazie di tutto!
Up!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2010, 11:21   #20
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Il mio "Capito" pensavo facesse intendere che avevo risorlto il problema. Comunque ho 2 domande:
1) è possibile dichiarare una classe dentro una classe?
Una rapida ricerca con google dice che non è possibile in PHP dichiarare nested class. Personalmente non ne ho mai sentito il bisogno in PHP, quindi non so se ci siano vie traverse per ottenere un equivalente.

Quote:
2) una classe come questa è davvero poco sicura: chiunque conosca la struttura della classe potrebbe accedere al database e farci quello che vuole. Come ovviare a questo? L'unica idea che mi è venuta in mente è di passare i dati per la connessione al db alla classe e di non salvarli in essa
Che vorrebbe dire poco sicura? Quella classe serve per accedere al database quindi nei limiti del previsto dalla classe stessa chiunque può usare il database a suo piacimento.
Eventualmente i dati di accesso li puoi tenere su un file di configurazione, non mi pare certo una buona idea replicare le credenziali di accesso al db su tutti i possibili chiamanti.
tomminno è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
Impulse Space svilupperà un lande...
I 2 mini aspirapolvere più potent...
The Crew 2 diventa finalmente giocabile ...
Sta succedendo davvero: Assetto Corsa Ra...
I 5 smartphone più scontati su Amazon: m...
Disponibilità OxygenOS 16: ecco q...
OxygenOS 16 ufficiale: tutte le novit&ag...
Nio sotto pressione: azioni crollano dop...
Spotify collaborerà con le major ...
Ingegneria Dei Sistemi svilupperà...
La gamma di iPhone sarà sempre pi...
Alla guida di nuova Alfa Romeo Tonale pl...
9 articoli su Amazon senza rivali, aggio...
HONOR svela il nuovo Watch 5 Pro e le cu...
MacBook Air 15'' con chip M4 in super of...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v