Cache class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior/senior Fullstack developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

C# .NET Developer

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf. Lees dan snel verder! Voor deze functie zoeken wij een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Daarnaast begeleid je complexe projecten, wij zoeken iemand die altijd kansen ziet en waarbij het glas altijd half vol is. Voor deze functie zoeken wij een Developer met ervaring op het gebied van .NET die deze organisatie gaat versterken. Binnen de organisatie ga jij je vooral bezighouden met het verbeteren van

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

Java Developer

Dit ga je doen Het ontwikkelen van nieuwe software; Het ombouwen van de bestaande software; Zowel back- als front-end software ontwikkelen; Het testen; Het implementeren van de volledig geteste software; Het verzorgen van nazorg en het oplossen van bugs; Het opstellen en bijhouden van procesdocumentatie; Je draagt bij aan het agile/scrum processen van het team. Hier ga je werken Ongetwijfeld heb je een of meerdere producten van deze organisatie in huis. Het proces erachter, daar ben je ongetwijfeld minder bekend mee. Deze opdracht geeft je de kans meer over dit proces te weten te komen en een mooie bijdrage te

Bekijk vacature »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Cymer Patch Server Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12919 Introductie This new patch server will be built on Python and Django ReST and GraphQL services with a React frontend, it will consist of several microservices and run on a Kubernetes cluster. It will be supported by several middleware applications such as ElasticSearch, Redis, RabbitMQ, Oracle and Artifactory. Functieomschrijving The Patch Admin team always aim to deliver software at a high quality, we avoid sacrifices here to maintain our velocity. Practically this means that we practice test driven development and perform end-to-end automated testing on our software. This means

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

PHP ontwikkelaar

Functie Jij komt te werken in een development team van 9 man. Het grootste deel doet back end development en daarnaast is er 1 teamlead en 1 tester in het team. Dit Agile team is van groots belang voor de organisatie omdat zij voornamelijk alle eigen systemen in-house ontwikkelen. Naast het door ontwikkelen van het bestaande platform en de software die daarbij komt kijken, zul jij je ook bezighouden met het realiseren en opzetten van nieuwe projecten binnen het bedrijf. Je staat nauw met de klant in contact om zo hun wensen zo goed mogelijk te kunnen realiseren. Daarnaast ontwikkel

Bekijk vacature »

Medior/senior Front-end developer

Functie Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden gebouwd, of grote complexe wijzigingen worden doorgevoerd op bestaande omgevingen. Je kunt (afhankelijk van jouw wensen en doelen) dus afwisselend werken in beide teams. Hiernaast participeer je in het Chapter Front-end development waar gezamenlijk kennis en ervaring wordt gedeeld. Als Front-end developer is het jouw doel

Bekijk vacature »

Low Code Ontwikkelaar

In het kort Als Low Code Developer werk je aan projecten bij en voor onze klanten, waarbij je voor het ontwikkelen van de oplossingen een technisch low-code platform gebruikt. Samen met het team streef je naar de beste oplossing en bepalen jullie de juiste aanpak. Je rol is divers en je bent van begin tot eind betrokken bij de ontwikkeling zowel de back-end en de front-end van de applicatie. Naast de ontwikkeling en oplevering, breng je ook advies uit aan de klant waarom bepaalde keuzes worden gemaakt. Je bent dan ook communicatief sterk en kunt je keuzes goed (inhoudelijk) onderbouwen.

Bekijk vacature »

Senior Full Stack developer

Bedrijfsomschrijving tbd Functieomschrijving Full Stack Java Development bij Randstad Groep Nederland (HQ) Er is een vacature in het Corporate Client Solutions (CCS) team. Dit team is met een ander team net begonnen aan het project ‘Grip op Inhuur’. Het doel van dit project is de tevredenheid van onze leveranciers te verhogen en de efficiëntie van onze administratie te verbeteren. Onderdeel daarvan is een ‘Mijn-omgeving’ voor ZZP’ers en leveranciers. Naast dit nieuwe project werkt het team ook aan het onderhoud en verbeteren van een digitaal vacature management systeem waarmee dagelijks vele vacatures worden voorzien. Het team ontwikkelt zo veel mogelijk zelf

Bekijk vacature »

Senior Fullstack developer wanted! (C#, Java, Angu

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

PHP Web Developer

Functie omschrijving Voor een klein softwarebedrijf in de omgeving Roosendaal, zijn wij op zoek naar een PHP web developer met een aantal jaar werkervaring. Wil jij graag werken aan in-house software projecten voor diverse klanten? Voel jij je prettige in een klein team developers, waar jouw inbreng enorm gewaardeerd wordt? Lees dan snel verder! Jouw werkzaamheden zien er als volgt uit: Je wordt verantwoordelijk voor de ontwikkeling van diverse applicaties. Dit kan de ene keer een online platform voor aanbiedingen zijn, en de andere keer een software pakket dat gebruikt wordt om interne processen te automatiseren. Het zijn stuk voor

Bekijk vacature »
Joakim Broden

Joakim Broden

26/07/2012 14:53:45
Quote Anchor link
Ik heb de volgende class gemaakt, graag zou ik er feedback willen krijgen. Ben aan het oefenen met OOP en hoop dat de goede kant op ga.

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php

    class Libary_Cache {
        /**
         * @acces Protected.
         * @var $_location String.
         */

        protected $_location    = null;
        
        /**
         * @acces Protected.
         * @var $_lifetime Integer.
         */

        protected $_lifetime     = 3600;

        /**
         * @acces Public.
         * @param $directory String.
         * @param $lifetime Integer.
         */

        public function __construct($directory, $lifetime = null) {
            $this->setLocation($directory);
            
            if (null !== $lifetime) {
                $this->setLifetime($lifetime);
            }
        }

        
        /**
         * @acces Protected.
         * @param $directory String.
         */

        protected function setLocation($directory) {
            if (!is_dir($directory)) {
                throw new Libary_Cache_Exception(sprintf('Failed to initialize %s class, directory \'%s\' does not exists.', __CLASS__, $directory));
            }

            
            $this->_location = (string) trim($directory, '\\').'\\';
        }

        
        /**
         * @acces Protected.
         * @param $lifetime Integer.
         */

        protected function setLifetime($lifetime) {
            $this->_lifetime = (integer) $lifetime;
        }

        
        /**
         * @acces Protected.
         * @param $key String.
         * @return String.
         */

        protected function getFile($key) {
            return $this->_location.'cache_'.md5($key);
        }

        
        /**
         * @acces Public.
         * @param $key String.
         * @param $data Mixed.
         * @param $lifetime Integer.
         */

        public function set($key, $data, $lifetime = null) {
            if (!$handler = fopen($this->getFile($key), 'w')) {
                throw new Libary_Cache_Exception(sprintf('Failed to initialize %s class, could not write \'%s\' to cache.', __CLASS__, $key));
            }

            
            $cacheData = serialize(array(
                'lifetime' => (time() + ((null === $lifetime) ? $this->_lifetime : (integer) $lifetime)),
                'data'      => $data
            ));
            
            fwrite($handler, $cacheData);
            fclose($handler);
            
            return $this;
        }

        
        /**
         * @acces Public.
         * @param $key String.
         * @return Mixed.
         */

        public function __get($key) {
            return $this->get($key);
        }

        
        /**
         * @acces Public.
         * @param $key String.
         * @return Mixed.
         */

        public function get($key) {
            if (!$this->exists($key)) {
                throw new Libary_Cache_Exception(sprintf('Failed to initialize %s class, could not read \'%s\' from cache.', __CLASS__, $key));
            }

            
            $cacheData = unserialize(file_get_contents($this->getFile($key)));
            
            if (($cacheData['lifetime'] - time()) < 0) {
                unlink($this->getFile($key));
            }


            return $cacheData['data'];
        }

        
        /**
         * @acces Public.
         * @param $keys String/Array.
         */

        public function remove($keys) {
            if (func_num_args() > 1) {
                $keys = func_get_args();
            }
else if (is_string($keys)) {
                $keys = array($keys);
            }

            
            foreach ($keys as $key) {
                if ($this->exists($key)) {
                    unlink($this->getFile($key));
                }
            }

            
            return $this;
        }


        /**
         * @acces Public.
         */

        public function clear() {
            foreach (glob($this->_location.'cache_*') as $cacheFile) {
                unlink($cacheFile);
            }

            
            return $this;
        }

        
        /**
         * @acces Public.
         * @param $key String.
         * @return Boolean.
         */

        public function exists($key) {
            return (file_exists($this->getFile($key))) ? true : false;
        }
    }

    
?>
Gewijzigd op 27/07/2012 10:20:00 door Joakim Broden
 
PHP hulp

PHP hulp

28/11/2024 18:40:50
 
- Raoul -

- Raoul -

26/07/2012 16:51:37
Quote Anchor link
Ik vind 'm zeer mooi gemaakt. Zou ik hem mogen gebruiken? ;-)
Gewijzigd op 26/07/2012 16:52:43 door - Raoul -
 
Joakim Broden

Joakim Broden

26/07/2012 16:57:15
Quote Anchor link
Natuurlijk mag je hem gebruiken (anders zette ik hem niet online), mits je weet wat hij doet. Want aan gewoon kopieer en plak heb je niks en leer je ook niks van. En ik ben geen expert in OOP dus ik wacht nog wel op feedback van gevorderde mensen hier op het forum ;-)
Gewijzigd op 26/07/2012 16:57:32 door Joakim Broden
 
Kris Peeters

Kris Peeters

26/07/2012 17:47:39
Quote Anchor link
Hertog Jan op 26/07/2012 16:57:15:
... mits je weet wat hij doet. Want aan gewoon kopieer en plak heb je niks ...


Wel ja, eventueel kan je daar nog aan werken.
Extra documentatie met uitleg over de bedoeling van de class en van de methodes.
En ook zeker @return in je documentatie opnemen.

Maar ik begrijp dat je toch eerst een ander soort commentaar wil horen.

---

EDIT: oh, sorry, ik zie dat je enkel de return niet documenteert als je $this terggeeft.
Dit is om aan chained linking te doen, veronderstel ik.
Gewijzigd op 26/07/2012 17:50:05 door Kris Peeters
 
Joakim Broden

Joakim Broden

26/07/2012 18:06:32
Quote Anchor link
Alle commentaar is welkom, hoe meer feedback hoe beter.

En inderdaad als ik $this return documenteer ik dat niet en dat is inderdaad voor chained linking. Zodat ik bv dit kan doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$cache->removeCache('key1')->removeCache('key2');

ipv
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$cache->removeCache('key1');
$cache->removeCache('key2');


Misschien is het handig om dit ook met een array te maken? Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$cache->removeCache(array('key1', 'key2'));
Gewijzigd op 26/07/2012 18:07:27 door Joakim Broden
 
Wouter J

Wouter J

26/07/2012 18:12:24
Quote Anchor link
Dat laatste is zeker makkelijker.
Gewijzigd op 26/07/2012 18:12:51 door Wouter J
 
Kris Peeters

Kris Peeters

26/07/2012 18:17:18
Quote Anchor link
Wel ja, dit laatste is een goede vraag.

Ik zie een aantal mogelijkheden.
- removeCache standaard een array geven
- Een extra methode removeCaches aanmaken, die intern removeCache aanroept.
- removeCache slim genoeg maken zodat je zowel 1 key als string kan geven als een array

Dit zou zeker alle drie werken, maar wat is principieel gezien meer de OOP way?
(Ik ben ook niet echt de beste referentie wat OOP betreft)
 
Joakim Broden

Joakim Broden

26/07/2012 18:24:41
Quote Anchor link
Ik heb er een extra functie bij gemaakt die removeCaches heet die je een array mee geeft en die functie roept mbv een foreach removeCache aan. Ik heb voor deze methode gekozen ivm de naamgeving. met removeCaches weet je dat je meerdere caches verwijderd en met removeCache weet je dat je maar 1 verwijderd. Wel heb ik voor de zekerheid een check op removeCaches gezet om te kijken of er wel een array is mee gegeven als argument.

En Wouter heb jij eventueel nog feedback wat betreft OOP? :-D
 
Wouter J

Wouter J

26/07/2012 19:11:35
Quote Anchor link
Hmm, ik vind denk ik de laatste method een mooiere: Kijk of er een array of string meegegeven is of misschien wel meerdere argumenten. Een beetje zoals dit:
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
<?php
function foo($caches) {
    if (1 < $args = func_num_args()) {
        // meerdere argumenten
        $caches = func_get_args();
    }
elseif (is_array($caches)) {
        // array
        $caches = $caches;
    }
else {
        // string
        $caches = array($caches);
    }


    foreach ($caches as $cache) {
        // do something
    }
}


// mogelijkheden
foo('Hello');
foo(array('hello', 'world');
foo('hello', 'world');
?>
 
- Raoul -

- Raoul -

26/07/2012 23:27:36
Quote Anchor link
Hertog Jan op 26/07/2012 16:57:15:
Natuurlijk mag je hem gebruiken (anders zette ik hem niet online), mits je weet wat hij doet. Want aan gewoon kopieer en plak heb je niks en leer je ook niks van. En ik ben geen expert in OOP dus ik wacht nog wel op feedback van gevorderde mensen hier op het forum ;-)


Bedankt! Ik weet wel hoe caching werkt, maar ik heb simpelweg geen tijd om zo'n klasse zelf te schrijven :-)
 
Joakim Broden

Joakim Broden

27/07/2012 10:19:39
Quote Anchor link
oke Wouter ik heb dat er van gemaakt ;-) en heb de namen van setCache, getCache etc veranderd naar set, get etc.

Zie beginpost voor volledige code.
 
Reshad F

Reshad F

27/07/2012 10:43:20
Quote Anchor link
ik zou ook Library_cache doen ipv Libary_cache :)
 
Joakim Broden

Joakim Broden

27/07/2012 10:44:32
Quote Anchor link
;-) Typefoutje, danke
 



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.