Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-10-2010, 21: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, 23: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, 07: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, 19: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, 20: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, 21: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, 23: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, 12: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, 17: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, 17: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, 17: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, 17: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 17:46.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2010, 20: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, 21: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, 08: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, 18: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, 18: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 18:12.
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 19: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, 23: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, 12: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


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Le tute spaziali AxEMU di Axiom Space pe...
Dongfeng sfida la NATO: navi dalla Cina ...
5G Standalone per il mondo marittimo: Er...
Nova Lake-S: configurazioni fino a 52 co...
Baxi presenta la pompa di calore Alya E ...
PC ASUS e Acer vietati in Germania: il t...
Stellantis rilancia il diesel in Europa:...
Truffa per utenti Trezor e Ledger: lette...
Wi-Fi 7 conveniente: FRITZ! lancia 4630,...
La Formula 1 dei robot tagliaerba miglio...
Il nuovo gioco del creatore di God of Wa...
Grok arriva sulle Tesla in Europa: l'int...
Assassin's Creed IV: Black Flag Remake p...
Il padre di God of War attacca Sons...
È operativo il primo computer qua...
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: 00:41.


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