[OOP] Telefoonboek

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 13382 Introductie We is looking for a HANA Developer to work for our client. The candidate has to have an experience in building Data Intensive Applications (DIA’s). The role of a HANA Developer at ASML involves working on building Data Intensive Applications in an industrial/enterprise environment. The primary responsibility is to handle data from various sources and determine the best way to structure it for use by data analysts, who will run queries and algorithms against it for predictive and prescriptive analytics through machine learning. Wat verwachten we van jou?

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 »

Informeel bureau zoekt Senior PHP developer

Functie Als senior PHP developer neem je het voortouw in ontwikkeltrajecten en ben je in staat werk uit te leggen aan collega’s om zo je kennis met hen te delen. Je deinst niet terug voor ingewikkelde projecten. Deze zie jij alleen maar als uit uitdaging. Je werkt doorlopend aan klantcases (en hierdoor je klant echt leert kennen), maar toch ben je afwisselend bezig. Dit alles in een vrije en ontspannen werksfeer, met een team van gelijkgestemde. Binnen de development teams werken ze met o.a. PHP, Laravel, React, Node, Elastic, Amazon AWS, JIRA, Solid, Domain-driven-design, Doctrine, Redis, docker, Kubernetes, CI, PHP

Bekijk vacature »

Front end developer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers met passie voor hun vak. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van ontwerp en ontwikkeling zullen samenkomen in een proof of concept. Nadat is vastgesteld dat de oplossing voldoet aan de belangrijkste behoeftes worden producten of services gevalideerd door middel van korte iteraties. Hiermee zorgen ze ervoor dat het werk voldoet aan de technische vereisten en gebruikersbehoefte. Door het inzetten van de nieuwste technologieën die toekomstbestendig zijn weten ze klanten omver te blazen. Ook geven en organiseren ze veel

Bekijk vacature »

Back-end Developer

Functieomschrijving Voor een erkende werkgever in de regio van Middelburg zijn wij op zoek naar een enthousiaste PHP / Symfony Developer. Een ambitieus persoon die het gemotiveerde development team komt versterken met het realiseren van nieuwe en complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor professionele groei? Dit ga je doen: Je bent verantwoordelijk voor de beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Oracle Apex developer

Bedrijfsomschrijving My client is a technology company based in Den Bosch, the Netherlands. They specialize in providing innovative software solutions to clients, and they are currently looking for an experienced Oracle Apex developer to join the IT team. Functieomschrijving As an Oracle Apex developer, you will be responsible for designing, developing, and maintaining web-based applications using Oracle Apex. You will work closely with project managers, business analysts, and other developers to ensure that clients' needs are met and that the software solutions are of the highest quality. Responsibilities: Design, develop, and maintain Oracle Apex applications. Work with project managers and

Bekijk vacature »

Full Stack .NET Developer

Dit ga je doen Als developer nieuwe gave features ontwikkelen; Werken met technieken als C#, Angular 12 en Javascript,; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een team van 7 professionals ben je als Full Stack .NET Developer verantwoordelijk voor het ontwikkelen van applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Wil je van meerwaarde

Bekijk vacature »

Front-end developer gezocht

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

Fullstack developer (NodeJS, React, AWS)

Functie Als Fullstack developer kom je te werken in het ontwikkelteam, maar zoals gezegd komt er veel meer bij kijken dan alleen maar ontwikkelen. Je bent samen met je collega’s continu bezig om de software uit te breiden maar hiernaast doe je doorlopend onderzoek naar de inzet van bijvoorbeeld Machine Learning. Ze willen met hun software echt voorlopen op andere en toegevoegde waarde leveren voor de eindgebruiker. Mede hierom zijn ze erg benieuwd naar iemand zijn persoonlijkheid, of hij graag nieuwe dingen uitzoekt (Google!), en initiatief neemt. Maar waar staan ze nu? Na een onderzoeksfase van ruim een jaar zijn

Bekijk vacature »

Fullstack Software Developer

Bedrijfsomschrijving Functieomschrijving Java ontwerpen, bouwen en testen (T-shaped). Als senior ontwikkelaar ben je bekend in zowel de back-end als de frontend van een applicatie. Angular, Continious Delivery / Integration. Een ervaren iemand die de leiding kan nemen, een weg vindt in nieuwe situaties, en in oude applicaties. Initiatiefrijk, bekend met de (technische) omgevingen die we bij duo gebruiken, niet te beroerd om collega’s te helpen. Als senior programmeur in staat om op te treden als lead programmeur. Ondersteunt de testers bij de testautomatisering en minder ervaren programmeurs bij dagelijks werkzaamheden. Dit laatste met name op het gebied van Angular. Achtergrond

Bekijk vacature »

Software Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Ervaren Software Developer

Functie omschrijving Ben jij een ervaren Software Developer, en heb je ervaring met technieken zoals C#, MS Access & SQL? Vind jij het leuk om maatwerk software te ontwikkelen voor klanten in een specifieke branche? Dan is dit de baan voor jou! Als ontwikkelaar ben jij samen met een team van 12 collega’s verantwoordelijk voor het bouwen van nieuwe functionaliteiten en het uitbreiden van de core applicatie. Belangrijk is dat je ervaring hebt met C# en MS Access. Je bent flexibel en klantvriendelijk ingesteld, omdat het belangrijk is om de klanten zo goed mogelijk van dienst te kunnen zijn. Thuiswerken

Bekijk vacature »

Senior Front-end Developer

Dit ga je doen Met behulp van diverse programmeertalen ontwikkelen van Front-end software; Het begeleiden van het front-end team; Het oplossen van incidenten; Het bijhouden van een backlog; Je hebt een actieve bijdrage in de wekelijkse overleggen met de omliggende teams; Je houdt trends bij en adviseert het management hierover waar nodig; Helder communiceren met de stakeholders om hen zo mee te nemen in projecten en laten inzien wat de duur en toegevoegde waarde van bepaalde projecten is. Hier ga je werken Deze organisatie heeft circa 40 miljoen bezoekers per maand en heeft innovatie hoog in het vaandel staan. Het

Bekijk vacature »

C# Ontwikkelaar

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

Als Lead PHP developer bijdragen aan het onderwijs

Functie Als Lead PHP developer zet je samen met het team en de andere lead developers de technische lijnen uit als het gaat om het ontwikkelen van de applicaties en bepaal je samen met de PO waar elke sprint aan gewerkt zal worden. Je kunt op basis van een user story een goede aanpak formuleren en een planning opstellen, en andere hierin meenemen. Wanneer je team code schrijft verwacht je degelijke oplossingen, bij voorkeur gebruik makend van Domain Driven Design. Je ziet toegevoegde waarde in het beoordelen van het werk van collega’s om zo samen te streven naar hoge kwaliteit

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

24/11/2024 15:16:36
 
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.