[OOP] PHP 5.2.2 Using $this when not in object context
ben sinds kort bezig met mijn portfolio systeem en was bezig een admin class te bouwen. Nou verloopt dit goed op 1 fatale error na, waar je dus logisch niet omheen kan.
deze error : Using $this when not in object context , krijg ik nadat ik probeer in te loggen. Ik heb al onderzoek gedaan op internet en kwam tot de conclusie dat je $this niet buiten een object mag gebruiken. Het vreemde is, dat ik $this alleen gebruik binnen het object Admin, en daarbuiten niet, toch krijg ik deze error midden in mijn object. hier mijn code van class Admin:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
class Admin
{
public $Id;
public $Username;
public $Password;
public $LoggedIn;
public function __construct()
{
$this->LoggedIn = false;
}
public function Login($username, $password)
{
$password = md5($password);
$sql = "SELECT * FROM `admin` WHERE `admin_username` = '".$username."' AND `admin_password` = '".$password."'";
$result = mysql_query($sql);
if(!$result)
{
$this->LoggedIn = false;
die(mysql_error());
}
else
{
if(mysql_num_rows($result) == 1)
{
$this->LoggedIn = true;
$this->Id = session_id();
$this->Username = $username;
$this->Password = $password;
$_SESSION['admin'] = true;
$_SESSION['pass'] = $password;
return true;
}
else
{
$this->LoggedIn = false;
return false;
}
}
}
public function Logout()
{
if($this->Id != '')
{
unset($_SESSION['admin']);
unset($_SESSION['pass']);
$this->LoggedIn = false;
}
}
public function CheckLogin()
{
return $this->LoggedIn;
}
}
?>
class Admin
{
public $Id;
public $Username;
public $Password;
public $LoggedIn;
public function __construct()
{
$this->LoggedIn = false;
}
public function Login($username, $password)
{
$password = md5($password);
$sql = "SELECT * FROM `admin` WHERE `admin_username` = '".$username."' AND `admin_password` = '".$password."'";
$result = mysql_query($sql);
if(!$result)
{
$this->LoggedIn = false;
die(mysql_error());
}
else
{
if(mysql_num_rows($result) == 1)
{
$this->LoggedIn = true;
$this->Id = session_id();
$this->Username = $username;
$this->Password = $password;
$_SESSION['admin'] = true;
$_SESSION['pass'] = $password;
return true;
}
else
{
$this->LoggedIn = false;
return false;
}
}
}
public function Logout()
{
if($this->Id != '')
{
unset($_SESSION['admin']);
unset($_SESSION['pass']);
$this->LoggedIn = false;
}
}
public function CheckLogin()
{
return $this->LoggedIn;
}
}
?>
hij geeft aan op line 34, dat daar de error zich bevind.
Hebben jullie enig idee wat het probleem is?
Als ik die code in een documentje plak krijg ik geen error ...
En ik krijg deze error pas, wanneer ik probeer in te loggen, zodra ik de function Login aanroep, daarvoor geeft hij geen fouten
Gewijzigd op 01/01/1970 01:00:00 door Jordy
En hoe roep je login aan? Via bijvoorbeeld $admin->Login('blaat', 'blaat'); of Admin::Login('blaat', 'blaat'); ? Dat laatste kan namelijk niet als je $this in de functie gebruikt. (tenminste niet naar mijn weten)
Want waneer je een method op de static manier aanroept (waneer hij dus niet onderdeel is van een instantie) dan bestaat $this idd niet. Dan zal je voor self::$var moeten gaan.
met de class is er niks mis mee, ik was vergeten om in de aanroep de static Admin::Login te vervangen naar $Admin->Login.
iig bedankt