|
|||||||
|
|
|
![]() |
|
|
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 17: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 18: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: 22:59.




















