Onderweg naar Classes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Francoi gckx

Francoi gckx

28/06/2013 13:56:42
Quote Anchor link
Ik probeer nu alles te regelen en te maken via classes, site is zo goed als klaar (dus nu nog omzetten naar classes)

Ten eerste heb ik een vraag, wanneer Extend je een class is dat
- alleen als je andermans classes gebruiken en je wilt die classes niet verneuken als je meer functinaliteit
wilt toevoegen dus extend je die class
of
-Kan je alles met 1 (eigen) class doen en is extending niet echt nodig?

Mij site heeft het volgende en ik wil graag wat tips of ik meerdere of 1 class hiervoor nodig heb.

1. Het ophalen,toevoegen, wijzigen, verwijderen van gegevens en een construct dat verbinding maakt met database.
Kan/moet (best practice) dat allemaal in 1 class? ik haal op, voeg toe, wijzig, en verwijder dat voor 3 onderdelen namelijk voor CV's gedeelte, Vacatures gedeelte, en Bedrijven gedeelte, (3 x 4 is 12 forms)
(of) Kan ik dat beter onderscheiden met 3 classes dus class 1.ClassCv 2.ClassVacature 3.ClassBedrijven?
Voor vacatures en cv heb ik ook nog een matching systeem.

Dan heb ik
2. Loginsysteem dat een registratie, een verander wachtwoord, vergeten wachtwoord heeft (ook hier een aparte class voor maken?)

Kan iemand mij hier op weghelpen?
 
PHP hulp

PHP hulp

24/04/2024 17:05:13
 
Erwin H

Erwin H

28/06/2013 16:08:45
Quote Anchor link
Ten eerste: nooit in andermans classes gaan zitten vroeten.
Een class is een op zichzelf staande entiteit die werkt als geheel. Als jij er dingen aan gaat veranderen, zal het regelmatig voorkomen dat je bepaalde dingen zo verandert dat het opeens niet allemaal meer werkt. Gebruik je andermans classes dan gebruik je altijd 'as-is'. Vind jij dat er een noodzaak is om iets te veranderen, dan bouw je een extension, of een soort wrapper of adapter. Zo behoudt de originele class zijn integriteit en kan jij toch die extra functionaliteit erbij krijgen.

Dan over extenden van classes, dat is zo ongeveer de meest misbruikte functionaliteit van OO. Dit is minder vaak noodzakelijk dan veel programmeurs denken. Wouter legt het altijd goed uit door de vraag te stellen: hebben de twee classes een 'heeft-een' of 'is-een' relatie? Alleen in het laatste geval kan je denken aan extenden, in het eerste geval nooit.
Een 'heeft-een' relatie is bijvoorbeeld die tussen een auto en zijn motorblok. Een auto heeft een motorblok, maar is geen motorblok.
Een 'is-een' relatie is Peugeot 206 en een auto. Die hebben een 'is-een' relatie, want een Peugeot 206 is een auto. Heb je dus al een auto class en wil je een Peugeot 206 class maken, dan zou je die van de auto kunnen extenden.

Maar om ook meteen een voorbeeld te geven waarin een 'is-een' relatie niet tot extenden zou moeten leiden: een administrator is een user. Maar toch zou je beter niet een administrator class van de user class kunnen afleiden. Beter is om 1 user class te houden en via andere objecten de eigenschappen van de administrator in die user class te injecteren. Dit geeft je namelijk veel meer flexibiliteit.
Gewijzigd op 28/06/2013 16:10:15 door Erwin H
 
Wouter J

Wouter J

28/06/2013 16:19:09
Quote Anchor link
Quote:
Een 'is-een' relatie is Peugeot 206 en een auto. Die hebben een 'is-een' relatie, want een Peugeot 206 is een auto. Heb je dus al een auto class en wil je een Peugeot 206 class maken, dan zou je die van de auto kunnen extenden. - See more at: http://www.phphulp.nl/php/forum/topic/onderweg-naar-classes/91318/last/#sthash.9QpkFSSg.dpuf

Hoewel dit goed past in mijn vraag (bedankt trouwens!) zou ik ook hier niet gaan extenden. Gewoon speciale motor injecteren, ect. En dan een factory maken die bij het juiste merk en type de auto en zijn onderdelen aan elkaar koppelt.
 
Erwin H

Erwin H

28/06/2013 16:23:50
Quote Anchor link
Om je eerlijk te zijn kon ik geen beter (simpel) voorbeeld bedenken waarbij het echt nuttig is om te extenden....
 
Francoi gckx

Francoi gckx

28/06/2013 16:49:45
Quote Anchor link
Ok kan zoiets:

Bestand 1:
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
<?php
    
    class dbConnection
        {
            protected $db_conn;
            private $db_name = 'fake';
            private $db_user = 'fake';
            private $db_pass = 'fake';
            private $db_host = 'fake';
            private $config_pw = array('fake' => 'fake');
                
            function
connect()
                {

                    try
                        {
                            $this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
                            $this->db_conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
                            return $this->db_conn;
                        }

                    catch(PDOException $e)
                        {

                            return $e->getMessage();
                        }
                }
        }

    
?>


Bestand 2:
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
<?php
include_once( 'inc_class/inc_class_fake.php' );
    class Bedrijf
        {
            public $link;
            
            function
__construct()
                {

                    $db_connection = new dbConnection();
                    $this->link = $db_connection->connect();
                    return $this->link;
                }
            function
showBedrijven()
                {

                    $show = $this->link->prepare("SELECT fake_id, fake_naam, fake_plaats, fake_website FROM fake_records");
                    $show->execute();
                    $counts = $show->rowCount();
                    if($counts >= 1)
                        {

                            $result = $show->fetchAll();
                        }

                    else
                        {
                            $result = $counts;
                        }

                    return $result;
                }
        }

?>
 
Erwin H

Erwin H

28/06/2013 16:59:31
Quote Anchor link
Probeer altijd de regel '1 class - 1 functionaliteit' in de gaten te houden. Hoe meer je die regel volgt, hoe meer je zal zien dat je classes echt altijd zijn te hergebruiken.

Je bovenstaande voorbeeld zal je zien dat je class 'bedrijf' in elk geval meerdere functies gaat krijgen. Nu al maakt die class een query aan, maar voert hem ook uit. Klinkt misschien een beetje muggenziften, maar bedenk eens hoe vaak je diezelfde code gaat gebruiken? Die code om de query uit te voeren wil je dus in je database class hebben, die is daar verantwoordelijk voor. Je bedrijf class geeft alleen de query door en krijgt resultaten terug.

Ook zou ik in de database class niet de configuratie instellingen zetten. Dat betekent namelijk dat je bij een volgend project, met andere instellingen, die class moet aanpassen. Dat wil je niet. Maak daarvoor een config class die de gegevens doorspeelt aan de database class.
 
Francoi gckx

Francoi gckx

28/06/2013 17:42:48
Quote Anchor link
Dus dit stukje in een ander method zetten in het eerste bestand
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$show->execute();
                    $counts = $show->rowCount();
                    if($counts >= 1)
                        {
                            $result = $show->fetchAll();
                        }
                    else
                        {
                            $result = $counts;
                        }


Bedankt voor tips
 
Erwin H

Erwin H

28/06/2013 18:14:28
Quote Anchor link
Ik zou zeggen nagenoeg de hele method 'showBedrijven()'. Die moet je dan natuurlijk veralgemeniseren en als iinput de query en de parameters geven. De class bedrijf zou min of meer dit moeten doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Bedrijf{
  public function showBedrijven(){
    return $this->link->performQuery("SELECT fake_id, fake_naam, fake_plaats, fake_website
                                      FROM fake_records"
);
  }
}

?>

Je database class zal dan de method 'performQuery' (of hoe je het ook wilt noemen) moeten krijgen en in die method de meegegeven query uitvoeren, de resultaten ophalen en teruggeven.
Gewijzigd op 28/06/2013 18:14:57 door Erwin H
 
Francoi gckx

Francoi gckx

28/06/2013 18:27:20
Quote Anchor link
Ok bedankt Erwin ik zou proberen je advies te volgen moet ik voor eventuele verdere vragen het niet hier maar in
Object-Oriented Programming posten?
 
Erwin H

Erwin H

28/06/2013 19:11:50
Quote Anchor link
Gelukkig ben ik geen mod, dus daar houd ik me niet mee bezig ;-)
 
Francoi gckx

Francoi gckx

28/06/2013 21:57:44
Quote Anchor link
Erwin H , of iemand anders mag ook, nog een vraag

wat is een goeie map indeling voor een middelgrote project
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/06/2013 10:12:58
Quote Anchor link
tja één vraag, 1000 antwoorden.. ik ga uit van een niet echt OOP en een good old days "1 internetpagina = 1 fysiek bestand" ofwel zonder frontcontroller dus

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
root:
-[css]
  -css  bestanden
-[js]
  -javascript bestanden
-[classes]
  -php classes
  -.htacces deny from all
-[images]
  - foto's
  
-php landing pagina's
 



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.