Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
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 Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Energia troppo cara, regole da rivedere:...
CPU che si piegano e miglior contatto: I...
Addio Volkswagen Touareg? Non proprio: i...
PS5 Slim 1 TB in bundle con Fortnite Flo...
Addio desktop ingombranti: questo mostro...
La fame di memoria dell'AI non si fermer...
Instagram, nuove restrizioni per i teena...
LinkedIn introduce il controllo della ve...
Attacco a Magento: ecco come un'immagine...
Un nuovo State of Play potrebbe arrivare...
App IO e IT-Wallet: i 14enni potranno ac...
No Man's Sky introduce la Xeno Arena: un...
Distributed AI Hub: l'infrastruttura IA ...
MOUSE: P.I. For Hire mostra il suo lato ...
La doppia sentenza che complica il caso ...
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: 15:01.


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