[OOP] Telefoonboek

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda ben je als PHP/Symfony Developer niet alleen gefocust op het ontwikkelen van software. Daarnaast ben je voortdurend bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Hieronder een kort overzicht van jouw takenpakket: Het ontwerpen en implementeren van webapplicaties met het Symfony Framework; Het schrijven van een schone en efficiënte codes; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klant; Onderhouden en updaten van bestaande applicaties die zijn gebouwd met het

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET Core developer wordt jij onderdeel van ons team met drie breed ontwikkelde software engineers en een flexibele schil met zes ervaren freelancers. Jij gaat mee in de visie van onze organisatie om als IoT partner in deze branche specifieke markt “het” platform te blijven innoveren en deze ook steeds slimmer te maken. Wij hopen dan ook zeker dit in de toekomst te kunnen realiseren met bijvoorbeeld Artificial Intelligence. De architectuur van ons platform is opgemaakt uit een deel eigen protocol, een interface laag en een laag welke de protocollen van derde partijen vertaald naar het eigen

Bekijk vacature »

Front-end Developer

Onze klant is sinds 2 jaar actief als adviseur en bemiddelaar in de verzekeringsmarkt. Sindsdien proberen zij deze slapende markt flink wakker te schudden. Dit willen zij doen door het bouwen van slimme vergelijkers op hun eigen website en die van partners. Het bedrijf wil continu voorop lopen, zodat consumenten eenvoudig de verzekeringen kunnen vinden die het beste bij ze past. Functieomschrijving Als Front-end Developer werk je aan vergelijkingsmodules die consumenten dagelijks gebruiken bij het vergelijken en afsluiten van verzekeringen. Je vindt het leuk om samen te werken met de product owner, bestaande modules te verbeteren en nieuwe vergelijkers "from

Bekijk vacature »

Python (Django) developer - Remote in The Netherla

Functie Together with your team, consisting of a senior, 2 mediors and one junior developer, you will work on their software in an Agile-based approach. You have an eye for quality, risk, and customer interest. Communication with your colleagues and, where necessary, with customers, plays an important role in achieving a successful result. As a person, you are smart, get things done, and are result-oriented. There is a lot of independence within the development team, apart from the stand-up (10:00 am) and occasional pair-programming sessions. Techniques they use include Python, Django, MySQL, Mercurial, Ubuntu Linux, Nginx. In terms of front-end

Bekijk vacature »

Fullstack JavaScript developer (ReactJS, NodeJS, T

Functie Het team bestaat momenteel uit ruim 15 collega’s, waarvan ruim de helft in het ontwikkelteam werkzaam is. Er zijn gave plannen om het platform ook te gaan toepassen op bijv. vliegvelden, maar ook internationale groei zit in het verschiet en daarom zijn ze op zoek naar versterking. Als Fullstack JavaScript developer werk je nauw samen met 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creeren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld

Bekijk vacature »

Trainee pega developer

Wil jij een mooie stap maken in jouw carrière? Mooi! Bij De Mandemakers Groep haal je binnen 6 maanden je CSA- en CSSA-certificaten, waarna jij aan de slag kan als Pega-developer in ons IT-team. Achter de schermen zorg jij ervoor dat collega’s efficiënt werken en klanten iedere dag beter geholpen worden. Wil jij daaraan bijdragen? En jouw ICT-skills ontwikkelen? Lees dan snel verder en solliciteer vandaag nog als trainee Pega-developer. Wat ga je doen? Als trainee Pega developer leiden wij je op tot gecertificeerd software developer voor het low-code platform PegaSystems. In de training ben je verantwoordelijk voor een te

Bekijk vacature »

Front end developer

Functie Jij als ervaren Front end developer bent een expert het gebied van Javascript en React. Je wordt onderdeel van een multidisciplinair team bestaande uit een PO, twee Front end developers, een DevOps/Back end developer, een UX/UI designer en een projectmanager. Verder is er iemand verantwoordelijk voor de HR en is de algemeen directeur nauw betrokken bij alle projecten. Dagelijks hou jij je bezig met de verschillende projecten die zijn opgenomen in de sprint. Daarnaast denk je mee over mogelijke oplossingen om de behoefte van de klant op de beste manier in te vullen. Verder spar jij intern met collega’s

Bekijk vacature »

Front end developer React Sportgames

Functie Als Front end developer ga jij aan de slag bij een gave en bekende organisatie op het gebied van sportgames. Jij gaat aan de slag in een scrumteam met 6 developers die gepassioneerd en actief bezig zijn om spelers kwalitatieve en mooie spelervaringen aan te bieden. Als scrumteam werken ze in drie wekelijkse sprints en begin je iedere ochtend met een stand-up. Als Front end developer werk jij bij deze organisatie voornamelijk met Javascript, html, css en React. Er wordt veel gebruikt gemaakt ook van C#, Docker en Kubernetes. Het team hecht veel waarde aan het leveren van hoogwaardige

Bekijk vacature »

Laravel PHP developer in een jong team

Bedrijfsomschrijving Als je op zoek bent naar een werkplek waar plezier en uitdaging hand in hand gaan, dan is dit bedrijf de juiste keuze voor jou. Hier kun je werken aan uitdagende projecten en krijg je als developer veel verantwoordelijkheid. Het bedrijf waardeert kwaliteit boven kwantiteit en richt zich op het ontwikkelen van hoogwaardige applicaties en websites waar klanten enthousiast over zijn. Dit bedrijf is vooruitstrevend en streeft naar het leveren van de best mogelijke resultaten voor hun klanten. Als medior PHP ontwikkelaar met 3 jaar ervaring ben jij de persoon die we zoeken. Je krijgt hier de kans om

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een bedrijf in de omgeving van Utrecht! Wil jij werken voor een internationaal bedrijf waar je legio mogelijkheden krijgt als Software Ontwikkelaar? Grijp nu je kans! Je kunt een uitdagende rol gaan vervullen als C#.NET Developer binnen een internationaal bedrijf dat gevestigd is in omgeving van Utrecht. Je zult gaan samenwerken met collega's die over de hele wereld verspreid zitten. Dit bedrijf is zeer vooruitstrevend en werkt met de nieuwste technieken. Als C#.NET Developer ga jij je bezig houden met het volgende: Je blijft op de hoogte van

Bekijk vacature »

Full-stack developer

Als Full-stack developer bij KUBUS houd je je bezig met het ontwikkelen van de (web)applicatie en services van BIMcollab. Samen met je SCRUM team werk je aan zowel de front- als de back-end. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein genoeg om als individuele ontwikkelaar invloed uit te kunnen oefenen en echt het verschil te kunnen maken. Ons ontwikkelteam bestaat uit ruim 40 ontwikkelaars, testers, scrum

Bekijk vacature »

Junior / Medior C# .NET ontwikkelaar in Brabants t

Bedrijfsomschrijving Ben jij een gepassioneerde C# .NET ontwikkelaar met een voorliefde voor hardware? Dan is dit de perfecte kans voor jou! Bij ons bedrijf krijg je de kans om deel uit te maken van een team van sociale en enthousiaste techneuten die er elke dag naar streven om onze eigen ontwikkelde software nog beter te maken. Het team van ongeveer 10 team medewerkers maakt zich hard om de interne processen gestroomlijnd te laten verlopen. Functieomschrijving Als lid van ons hechte en behulpzame team word je betrokken bij diverse projecten. Daarbij krijg je te maken met data-analyses, content en de logistieke

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Junior PHP Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »
Tim

Tim

03/02/2009 19:18:00
Quote Anchor link
Heey mensen,


Ik ben weer een beetje aan het proberen met OOP en vroeg me af of het volgende goed was? Opmerkingen en (opbouwende) kritiek zijn altijd welkom!

index.php
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
require('class_Database.php');
require('class_Telefoonboek.php');
require('class_TelefoonboekRecord.php');

$telefoonboek = new Telefoonboek;
$message = $telefoonboek->initiate();
$records = $telefoonboek->getAllRecords();
?>


<HTML>

<HEAD>

<TITLE>Telefoonboek</TITLE>

</HEAD>

<BODY>

<?php

if(!empty($message)){
    echo $message . '<br><br>';
}



if(!$records){
    echo 'Er zijn geen nummers gevonden.';
}
else{
    ?>

    
    <TABLE>
     <TR>
      <TD STYLE='width: 200px; font-weight: bold;'>Name</TD>
      <TD STYLE='width: 200px; font-weight: bold;'>Number</TD>
     </TR>
    
     <?php
    
     for($i = 0; $i < count($records); $i++){
         echo '<TR>';
          echo '<TD>' . $records[$i]->getName() . '</TD>';
          echo '<TD>' . $records[$i]->getNumber() . '</TD>';
         echo '</TR>';
     }

    
     ?>

    
    </TABLE>
    
    <?php
}
?>


<br><br><br><br>

<FORM ACTION='' METHOD='POST'>
 <TABLE>
  <TR>
   <TD>Name:</TD>
   <TD><INPUT TYPE='text' NAME='name'></TD>
  </TR>
  <TR>
   <TD>Number:</TD>
   <TD><INPUT TYPE='text' NAME='number'></TD>
  </TR>
  <TR>
   <TD COLSPAN='2'><br><INPUT TYPE='submit' NAME='submit' VALUE='Voeg Toe'></TD>
  </TR>
 </TABLE>
</FORM>

</BODY>

</HTML>


class_Telefoonboek.php
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php

class Telefoonboek {
    public function initiate() {
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $check = $this->checkValues();
            
            if($check){
                if($this->addRecord()){
                    return 'Het nummer is succesvol toegevoegd.';
                }
else{
                    return 'Het nummer kon niet worden toegevoegd.';
                }
            }
else{
                return $check;
            }
        }
    }

    
    protected function checkValues() {
        $error = '';
        
        if(strlen($_POST['name']) < 4 || strlen($_POST['number'] > 200)){
            $error .= 'Controleer de ingevoerde naam.<br>';
        }

        
        if(!is_numeric($_POST['number']) || strlen($_POST['number']) < 4 || strlen($_POST['number']) > 25){
            $error .= 'Controleer het ingevoerde telefoonnummer.<br>';
        }

        
        if(!empty($error)){
            return $error;
        }

        
        return true;
    }

    
    protected function addRecord(){
        $database = new Database;
        $database->connect();
        
        $sql = 'INSERT INTO telefoonboek SET name="' . mysql_real_escape_string($_POST['name']) . '", number="' . mysql_real_escape_string($_POST['number']) . '"';
        $result = $database->makeRow($sql);
        
        $database->disconnect();
        
        if(!$result){
            return false;
        }

        
        return true;
    }

    
    public function getAllRecords() {
        $database = new Database;
        $database->connect();
        
        $sql = 'SELECT * FROM telefoonboek';
        $count = $database->countRows($sql);
        
        if($count > 0){
            $rows = $database->getRows($sql);
            
            for($i = 0; $i < count($rows); $i++){
                $record = new TelefoonboekRecord;
                $record->setId($rows[$i]['id']);
                $record->setName($rows[$i]['name']);
                $record->setNumber($rows[$i]['number']);
                
                $records[] = $record;
            }

            
            $database->disconnect();
            
            return $records;
        }
else{
            $database->disconnect();
            
            return false;
        }
    }

    
    public function getRecord($id) {
        $database = new Database;
        $database->connect();
        
        $sql = 'SELECT * FROM telefoonboek WHERE id="' . mysql_real_escape_string($id) . '"';
        $count = $database->countRows($sql);
        
        if($count == 1){
            $row = $database->getRow($sql);
            
            $record = new TelefoonboekRecord;
            $record->setId($row['id']);
            $record->setName($row['name']);
            $record->setNumber($row['number']);
            
            $database->disconnect();
            
            return $record;
        }
else{
            $database->disconnect();
            
            return false;
        }
    }
}


?>


class_TelefoonboekRecord.php
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
<?php

class TelefoonboekRecord {
    protected $id, $name, $number;
    
    function
__contruct() {
        $this->id = 0;
        $this->name = '';
        $this->number = '';
    }

    
    public function setId($id) {
        $this->id = $id;
    }

    
    public function getId() {
        return $this->id;
    }

    
    public function setName($name) {
        $this->name = $name;
    }

    
    public function getName() {
        return $this->name;
    }

    
    public function setNumber($number) {
        $this->number = $number;
    }

    
    public function getNumber() {
        return $this->number;
    }
}


?>


Groetjes!
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
PHP hulp

PHP hulp

26/12/2024 12:46:43
 
PHP erik

PHP erik

03/02/2009 20:11:00
Quote Anchor link
1. Je ziet hier al direct dat iets niet klopt:
class Telefoonboek extends Database

Telefoonboek is namelijk geen database, maar een tabel. Dus deze extend klopt niet.

2. Je TelefoonboekRecord lijkt er al meer op, al is dat uiteraard gewoon een simpele wrapper

3. Alle $_POST-handelingen horen absoluut niet thuis in deze class. $_POST is iets specifieks van je applicatie, namelijk validatie, en hoort niet gemengd te worden met databasehandelingen. Je instantiate(), checkValues() en addRecord() kunnen dus echt niet op die manier.

Tip: bij addRecord() kun je een TelefoonboekRecord-object mee laten geven. Dus addRecord(TelefoonboekRecord $record). Dan zie je al dat je logisch bezig bent, want je definieert de waarden elders. Er zijn echter honderd manieren om databaseobjecten te maken. Ik zou zeggen Google ook eens op DAO (data access object).

4. Je getAllRecords() zou je statisch kunnen maken. Hij is namelijk niet echt afhankelijk van properties binnen je object en manipuleert je object ook niet. Maar dan moet je wel kijken hoe je je connectie meegeeft. Maar als je punt 1 hierboven leest dan zie je ook dat je eigenlijk niet moet extenden van Database.


Hier een voorbeeldje van in welke richting ik meer zou kijken:

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
<?php
abstract class DatabaseTable_Abstract
{
    protected $_db;

    public function __construct(Database $database)
    {

            $this->_db = $database;
    }
}


class Telefoonboek extends DatabaseTable_Abstract
{
     public function addRecord(TelefoonboekRecord $record)
     {

           // insert $record-object
     }
}

?>


Ik zou zelf een nog andere opzet gebruiken maar die gaat een beetje langs jouw aanpak heen terwijl jouw aanpak niet per se slechter is.

Ik zou in de TelefoonboekRecord-class al een insert-optie maken en het Telefoonboek-object houden om bijv. meerdere records op te vragen.

Daarnaast zou ik het database-object ophalen met een statische functie uit bijvoorbeeld een registry. Zoiets als $this->_db = Registry::get('db'); Dan hoef je dit niet steeds mee te geven. Je kunt dan ook makkelijker statische functies gebruiken.

Voor alle $_POST-dingen zul je aparte validatieobjecten "moeten" maken. Deze objecten zouden wel gebruik kunnen maken van bijvoorbeeld TelefoonboekRecord om bijvoorbeeld te zien welke velden worden verwacht.


Oke veel commentaar maar ik vind het zeker niet slecht.


Edit:
Oh, oh, en errors return je niet in een lijst, daar gooi je Exceptions voor. Bij validatie heb je echter goed gezien dat je misschien een errorlijst wil. Maar ik zou niet ervoor kiezen om één functie óf true óf een errorlist te laten returnen. Ik zou eerder een ->isValid() method maken, en bij false, een getErrors() method. Maar dan dus wel ergens in een validatieobject. Zie ook voor de grap eens een pagina uit een tutorial die ik ooit heb geschreven: http://phphulp.nl/php/tutorials/8/632/1667/
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Tim

Tim

03/02/2009 20:19:00
Quote Anchor link
Bedankt voor je tips!

Dat extenden van de database was een foutje uit een eerdere versie. Zoals je verder ziet in de methods gebruikte ik deze extend in principe niet. Hij is eruit en ik had hem er al 'uitgedacht'.

De rest zal ik meenemen in een volgende versie!
 
PHP erik

PHP erik

03/02/2009 20:27:00
Quote Anchor link
Je bent goed bezig. Misschien nog iets meer het gevoel krijgen van wat je object moet voorstellen en wat je er in implementeert. Je maakt het jezelf al moeilijk als je een object "Telefoonboek" noemt. Dit kan namelijk echt vanalles zijn. In werkelijkheid is het geen Telefoonboek, maar een representatie van je telefoonboek-databasetabel. Stel je had 'm TelefoonboekTabel genoemd (misschien geen mooie naam), dan had je wel sneller voor jezelf bedacht dat je niet $_POST-waarden gaat valideren binnen je Tabel-object. Een tabel heeft namelijk eigenlijk maar 4 handelingen: select, update, insert, delete. Er zit geen validate()-functie in. Dat zou je uitspreken als Tabel::validate(). Dat impliceert direct al dat je een tabel aan het valideren bent, en dat doe je niet. Je valideert data van buitenaf.

Bekijk ook eens wat frameworks zoals Zend, symfony en CakePHP om te zien wat voor standaardobjecten zij definiëren. Het is vaak al leerzaam te weten waar men aparte objecten voor gebruikt.

Good luck.

edit: overigens kun je dit object absoluut gewoon Telefoonboek noemen hoor, als je maar altijd in je achterhoofd houdt wat "Telefoonboek" dan precies betekent.
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Tim

Tim

03/02/2009 20:40:00
Quote Anchor link
Thanks, ik ga er mee aan de slag!
 



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.