OOP werking met multiple classes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

HaasOnline XX

HaasOnline XX

13/04/2007 19:36:00
Quote Anchor link
Ik ben pas begonnen om mijn internetsite geheel in OOP te gaan uitvoeren, ik heb recentelijk namelijk met C++ gewerkt en ik ken de voordelen nu. Maar helaas gaat niet alles zoals ik zou willen. Hoe is het bijvoorbeeld mogelijk om classes te defineren (aanspreken) in een classe zelf. Ik heb bijvoorbeeld een verzamel classe die de statistieken bijhoudt, maar die classe moet gebruik gaan maken van classe waarin bijvoorbeeld het ip adres wordt opgehaald. Iemand suggesties?

Voorbeeldje (wat dus niet werkt)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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]
 
PHP hulp

PHP hulp

16/04/2024 19:39:29
 
Quote Anchor link
je moet sowieso geen includes in een class zetten denk ik. Voor de rest weet ik het niet :P
 
Baarr

Baarr

13/04/2007 20:51:00
Quote Anchor link
Als je met PHP5 werkt kun je autoload gebruiken om classes automatisch te laten wanneer ze nodig zijn, ff RTFM-en.

Zo niet, dan moet je een ander mechanisme maken, of gewoon vantevoren bepalen welke classes je allemaal nodig hebt in je applicatie of file.
 
Frank -

Frank -

13/04/2007 20:53:00
Quote Anchor link
Include? Gebruik extends wanneer je een classe bouwt die van een andere afhankelijk is.
 
Baarr

Baarr

13/04/2007 20:58:00
Quote Anchor link
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
 
Jan Koehoorn

Jan Koehoorn

13/04/2007 21:07:00
Quote Anchor link
Het is handiger om een membervariabele aan te maken in class A die een instantie van class B kan bevatten.
Edit:
Bijvoorbeeld zo (code niet getest):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Pim Vernooij

Pim Vernooij

13/04/2007 23:39:00
Quote Anchor link
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.
 
HaasOnline XX

HaasOnline XX

14/04/2007 10:33:00
Quote Anchor link
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?
 
Pim Vernooij

Pim Vernooij

14/04/2007 15:09:00
Quote Anchor link
In een goed OO model komen de gegevens bij het object vandaan waarvan je het verwacht. Het is niet logisch dat het ip van de user uit een statistieken klasse vandaan haalt. Dit ip is onderdeel van de user, en moet dus bij het user object vandaan komen.

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!
 
HaasOnline XX

HaasOnline XX

15/04/2007 19:10:00
Quote Anchor link
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).
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.