You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, August 7th 2009, 4:00pm

Probleme mit OOP: Using $this when not in object context

Moin,

ich bin grad dabei OOP zu lernen und werde aus folgendem Fehler nicht schlau:

Source code

1
Fatal error: Using $this when not in object context in /opt/lampp/htdocs/www/oop/library/user.class.php on line 19


Mein Codeabschnitt: (user.class.php, line 19 entsprichthier Zeile 11)

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
class User 
{
	public $userID;
	public $username;
	public $password;
	public $birthday;
	public $email;
	
	public function setUser($userID)
	{
		$this->userID = $userID;				
	}	
}


Ich bin doch im Objekt drinne?!?!

2

Friday, August 7th 2009, 4:32pm

wie rufst du denn die Funktion "setUser($userID)" auf?

3

Friday, August 7th 2009, 7:13pm

wie rufst du denn die Funktion "setUser($userID)" auf?


zufällig so

PHP Quellcode

1
User::setUserId()
? ;)

4

Friday, August 7th 2009, 7:35pm

ja nur ohne id, also in kompletter form per $_GET so:

PHP Quellcode

1
User::setUser($_GET['userID']);

5

Friday, August 7th 2009, 8:01pm

Hm, mal sehen ob du mit Hilfe dieses Links selbst drauf kommst :)

6

Saturday, August 8th 2009, 12:59am

Nau spitfire

Hast immer noch nicht die Lösung gefunden?
Was er dir sagen will ist das du kein Objekt der Klasse hast um auf die Methode zu zugreifen zu können.

Du mußt also zuerst ein Objekt erzeugen danach kannst du mit User::setUser($_GET['userID']); Drauf zugreiffen.

Mfg Splasch

7

Saturday, August 8th 2009, 9:59am

Du mußt also zuerst ein Objekt erzeugen danach kannst du mit User::setUser($_GET['userID']); Drauf zugreiffen.


Das ist nicht richtig, mit dem Gültigkeitsoperator kannst du auf Konstanten oder statische Funktionen der Klasse zugreifen und dafür braucht man keine Instanz ;)

Aber da die Funktion nicht als statisch deklariert ist, funktioniert das natürlich nicht.

8

Saturday, August 8th 2009, 4:15pm

Wenn sie statisch ist es wieder was anderes dazu braucht man dann kein Objekt mehr davon erzeugen.
Aber das hat er ja nicht gemacht somit braucht er voher das Objekt.

Mfg Splasch

9

Saturday, August 8th 2009, 5:06pm

Wenn sie statisch ist es wieder was anderes dazu braucht man dann kein Objekt mehr davon erzeugen.
Aber das hat er ja nicht gemacht somit braucht er voher das Objekt.

Mfg Splasch


Quoted

Du mußt also zuerst ein Objekt erzeugen danach kannst du mit User::setUser($_GET['userID']); Drauf zugreiffen.


Richtig, aber du hast geschrieben, dass er das Objekt benötigt und trotzdem die Methode statisch aufrufen kann.

10

Saturday, August 8th 2009, 10:45pm

Naja dann hab ich mich eben falsch ausgedrückt Deutsch war noch nie meine stärke.
Enutell sollte er noch überlegen ob nicht ein Singelton benötig wird.

Mfg Splasch

11

Saturday, August 8th 2009, 11:52pm

Naja dann hab ich mich eben falsch ausgedrückt Deutsch war noch nie meine stärke.
Mit Deutsch hat das nicht viel zu tun. Mit dem Doppelpunktoperator (wie in User::setUser($_GET['userID']);) kann man nur auf statische Funktionen und Variablen zugreifen (und auf überschriebene Funktionen, aber darum gehts hier nicht). Nicht-statische Operationen können nur über den Pfeiloperator auf nem Object aufgerufen werden... also z.b.

PHP Quellcode

1
$User1->setUser(...);


http://www.php.net/manual/de/language.oop5.basic.php
Hier sieht man im ersten Beispiel nochmal wie die gleiche Funktion statisch und nicht statisch aufgerufen wird und was mit $this passiert.

Social bookmarks