|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
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); } } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Sarà mica che il metodo è statico?
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Ho controllato... E' una classe!
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
No, l'errore si riferisce alla riga 15 che è quella della connessione mysqli.
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#8 |
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....
|
![]() |
![]() |
![]() |
#9 |
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; } } Grazie! |
![]() |
![]() |
![]() |
#10 |
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. |
![]() |
![]() |
![]() |
#11 |
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?
|
![]() |
![]() |
![]() |
#12 |
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. |
![]() |
![]() |
![]() |
#13 |
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 |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Debugger? Uso Eclipse e Easy PHP (apache mysql5).
Come posso installare o usare un debugger? |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#16 |
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 {} } |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Quote:
Così dovrebbe funzionare (devi usare $this->variabile sia per assegnare che per richiamare) Codice PHP:
![]() Ultima modifica di kk3z : 28-10-2010 alle 17:12. |
|
![]() |
![]() |
![]() |
#18 |
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 |
![]() |
![]() |
![]() |
#19 |
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! |
![]() |
![]() |
![]() |
#20 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
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. |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:43.