OOP werking met multiple classes
Voorbeeldje (wat dus niet werkt)
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
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
<?php
class ipclass
{
var $userip;
function GetUserIP() {
$ip = "Secure adres"; // Default set to secure (if unknown or untracable)
// Recieve IP adres (method by PHP.net)
if ( !($this->userip) ) { // Only search the ip if its unknown
if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$this->userip = getenv("HTTP_CLIENT_IP");
} elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$this->userip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$this->userip = getenv("REMOTE_ADDR");
} elseif (isset($_SERVER["REMOTE_ADDR"]) && $_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")) {
$this->userip = $_SERVER["REMOTE_ADDR"];
}
}
$ip = $this->userip;
return ($ip);
}
....
}
[/code]
[code]
class counterclass
{
include("class.ip.php");
include("class.browser.php");
include("class.language.php");
function ViewSettings() {
$iphandler = new ipclass();
echo "IP: ".$iphandler->GetUserIP()."<br>";
echo "Provider: ".$iphandler->GetProvider( $iphandler->GetUserIP() )."<br>";
echo "Connection Type: ".$iphandler->GetConnectionType( $iphandler->GetUserIP() )."<br>";
echo "Network class: ".$iphandler->GetNetworkClass( $iphandler->GetUserIP() )."<br>";
}
}
[/code]
class ipclass
{
var $userip;
function GetUserIP() {
$ip = "Secure adres"; // Default set to secure (if unknown or untracable)
// Recieve IP adres (method by PHP.net)
if ( !($this->userip) ) { // Only search the ip if its unknown
if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$this->userip = getenv("HTTP_CLIENT_IP");
} elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$this->userip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$this->userip = getenv("REMOTE_ADDR");
} elseif (isset($_SERVER["REMOTE_ADDR"]) && $_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")) {
$this->userip = $_SERVER["REMOTE_ADDR"];
}
}
$ip = $this->userip;
return ($ip);
}
....
}
[/code]
[code]
class counterclass
{
include("class.ip.php");
include("class.browser.php");
include("class.language.php");
function ViewSettings() {
$iphandler = new ipclass();
echo "IP: ".$iphandler->GetUserIP()."<br>";
echo "Provider: ".$iphandler->GetProvider( $iphandler->GetUserIP() )."<br>";
echo "Connection Type: ".$iphandler->GetConnectionType( $iphandler->GetUserIP() )."<br>";
echo "Network class: ".$iphandler->GetNetworkClass( $iphandler->GetUserIP() )."<br>";
}
}
[/code]
je moet sowieso geen includes in een class zetten denk ik. Voor de rest weet ik het niet :P
Zo niet, dan moet je een ander mechanisme maken, of gewoon vantevoren bepalen welke classes je allemaal nodig hebt in je applicatie of file.
Include? Gebruik extends wanneer je een classe bouwt die van een andere afhankelijk is.
Frank schreef op 13.04.2007 20:53:
Include? Gebruik extends wanneer je een classe bouwt die van een andere afhankelijk is.
Extenden doe je alleen wanneer de child class de eigenschappen moet erven van de parent class. Aangezien deze 2 die hierboven staan niets met elkaar van doen hebben valt er weinig te extenden.
Gewijzigd op 01/01/1970 01:00:00 door Baarr
Edit:
Bijvoorbeeld zo (code niet getest):
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
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
<?php
class ipclass
{
var $userip;
function GetUserIP()
{
// Default set to secure (if unknown or untracable)
$ip = "Secure adres";
// Recieve IP adres (method by PHP.net)
if (!($this->userip)) {
// Only search the ip if its unknown
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$this->userip = getenv("HTTP_CLIENT_IP");
} elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$this->userip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$this->userip = getenv("REMOTE_ADDR");
} elseif (isset($_SERVER["REMOTE_ADDR"]) && $_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")) {
$this->userip = $_SERVER["REMOTE_ADDR"];
}
}
$ip = $this->userip;
return($ip);
}
. ...
}
class counterclass
{
private $ip_class;
function set_ip_class($ip_class)
{
$this->ip_class = $ip_class;
}
function ViewSettings()
{
echo "IP: " . $this->ip_class->GetUserIP() . "<br>";
echo "Provider: " . $this->ip_class->GetProvider($this->ip_class->GetUserIP()) . "<br>";
echo "Connection Type: " . $this->ip_class->GetConnectionType($this->ip_class->GetUserIP()) . "<br>";
echo "Network class: " . $this->ip_class->GetNetworkClass($this->ip_class->GetUserIP()) . "<br>";
}
}
$ipclass = new ipclass();
$counterclass = new counterclass();
$counterclass->set_ip_class($ipclass);
$counterclass->ViewSettings();
?>
class ipclass
{
var $userip;
function GetUserIP()
{
// Default set to secure (if unknown or untracable)
$ip = "Secure adres";
// Recieve IP adres (method by PHP.net)
if (!($this->userip)) {
// Only search the ip if its unknown
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$this->userip = getenv("HTTP_CLIENT_IP");
} elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$this->userip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$this->userip = getenv("REMOTE_ADDR");
} elseif (isset($_SERVER["REMOTE_ADDR"]) && $_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")) {
$this->userip = $_SERVER["REMOTE_ADDR"];
}
}
$ip = $this->userip;
return($ip);
}
. ...
}
class counterclass
{
private $ip_class;
function set_ip_class($ip_class)
{
$this->ip_class = $ip_class;
}
function ViewSettings()
{
echo "IP: " . $this->ip_class->GetUserIP() . "<br>";
echo "Provider: " . $this->ip_class->GetProvider($this->ip_class->GetUserIP()) . "<br>";
echo "Connection Type: " . $this->ip_class->GetConnectionType($this->ip_class->GetUserIP()) . "<br>";
echo "Network class: " . $this->ip_class->GetNetworkClass($this->ip_class->GetUserIP()) . "<br>";
}
}
$ipclass = new ipclass();
$counterclass = new counterclass();
$counterclass->set_ip_class($ipclass);
$counterclass->ViewSettings();
?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Sowieso is je OO model nog niet helemaal goed, het ip van de user komt namelijk niet uit een "ipclass", maar van de user zelf. Wat dus een wat correcter model is, is een User class, met een method getIp();, dus User::getIp(); geeft wat meer logica aan je code.
Pim Vernooij schreef op 13.04.2007 23:39:
Sowieso is je OO model nog niet helemaal goed, het ip van de user komt namelijk niet uit een "ipclass", maar van de user zelf. Wat dus een wat correcter model is, is een User class, met een method getIp();, dus User::getIp(); geeft wat meer logica aan je code.
Kan je daar een pratisch voorbeeld van geven?
Dit geldt overigens voor iedere OO taal. De OO principes zijn overal gelijk. Verdiep je eens in deze principes, dan gaat het hele OO gebeuren een stuk duidelijker voor je worden!
Sorry Pim Vernooij, ik was een beetje onduidelijk lees ik zonet. Ik bedoel of je een beetje kan toelichten hoe je tot het managed deel komt, dus "User::getIp()". Ik kan dit nergens vinden voor PHP (wel voor C).