[oop] gebruik defines

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robot Programmeur

Bedrijfsomschrijving: Locatie: regio Breda Dit is een high-tech organisatie met meer dan 600 werknemers wereldwijd. Ze bieden een open en informele werksfeer met een hoge mate van zelfstandigheid en professionaliteit. Ter uitbreiding van het team zijn we op zoek naar een Robot Programmeur. Met productievestigingen in Nederland, Amerika, Tsjechië, China, Mexico en de Verenigde Staten kunnen hun klanten overal ter wereld ondersteund worden. Deze organisatie ontwerpt en bouwt gerobotiseerde productiesystemen, waarbij lassen en andere verbindingstechnologieën een centrale rol spelen. Ze zijn zowel in de automotive als de algemene industrie actief, waar hoge productievolumes en een hoge mate van automatisering essentieel

Bekijk vacature »

Senior Frontend developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Bij DPA GEOS werken onze consultants als Frontend Developer in Agile teams bij onze klanten en zijn ze verantwoordelijk voor de grotere webapplicaties. Wil jij dit ook, want we zijn op zoek naar enthousiaste Frontend Developers om ons development team te versterken. Je draagt positief bij aan de teamgeest binnen een projectteam je kijkt verder dan je eigen rol. Eventueel begeleid je ook andere ontwikkelaars in het softwareontwikkelproces. Je gaat webapplicaties maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

Software Developer Microservices

I’m looking for a software developer who can take on some of our challenges to build and create products based on a microservice architecture in order to improve productivity, modularity and scalability of (high-tech) organizations. You will be working closely with the engineering lead and developers in an agile environment with a high degree of freedom. As a software developer in my team you will get the chance to work in different tech environments and continue to develop your skills and expertise further. I will gladly tell you more about it during a cup of coffee! What you will bring

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET developer begint jouw dag na een bak koffie met een stand up. De vorderingen worden tijdens de stand up besproken en de doelen worden opgesteld waar jullie als team in de volgende sprint naartoe gaan werken. Onze backend is geschreven in .NET Core en onze Front-end in Angular. Bij ons ga jij dan ook Fullstack aan de slag. Jij wordt hier opgeleid om zelfstandig te kunnen programmeren en applicaties te kunnen implementeren. Er wordt op projectbasis gewerkt, dit bied leuke uitdagingen omdat elke klant een andere visie heeft over de applicatie die wij maken. Je gaat

Bekijk vacature »

LabVIEW Developer

Dit ga je doen Als LabVIEW Developer hou je je bezig met: Het (door)ontwikkelen van LabVIEW applicaties; Het meewerken aan diverse projecten; Het meedenken over nieuwe tools en technieken; Het werken aan hardware op de meetstations; Het begeleiden van meer junior collega's. Hier ga je werken Het bedrijf van je als LabVIEW Developer komt te werken staat internationaal bekend om het testen van bodemstructuren door middel van echotechnieken en beeldherkenning, ter verbetering van het openbaar vervoer. Op dit moment zijn ze nationaal en internationaal bezig met projecten waar hun expertise gevraagd wordt. Ondanks de grote reikwijdte is de vestiging in

Bekijk vacature »

IAM Developer

Dit ga je doen Development, configuration and operation of IAM AD landscape; Proactive optimizing the environment; Collaborating with and supporting the System Architect on his designs; Designing functional and technical documentation regarding the business’ and IT’s requirements; Designing and configuring the functionalities by following the IAM architectural principles, strategy and standards; Collaborating with Stakeholders and team members. Hier ga je werken This industrial company is very innovative and always searching for new technologies. Within the IAM team you will align with DevOps teams, IAM System Architect, the Scrum Master and the Product Owner on operational planning and progress. Within the

Bekijk vacature »

Medior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Medior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

.NET developer

Functie Als ervaren .NET ontwikkelaar start jij een team met 12 programmeurs. Jullie zijn verantwoordelijk voor het huidige platform van deze organisatie. Als team werken jullie in tweewekelijkse sprints en starten jullie iedere dag met een stand-up. Jij werkt samen met jouw team aan het uitbreiden van het huidige platform door middel van nieuwe features. Daarnaast zorg jij er samen met jouw team voor dat het platform veilig is en gebruiken jullie de nieuwste technieken om deze veiligheid te waarborgen. Zo maken jullie gebruik van C# .NET, .NET Core, React, Azure, Kubernetes, ASP.NET, MVC. Jij gaat aan het werk in

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Senior Java developer (backend)

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 »

React Native developer

Functie Het nieuwe product bestaat uit een webapplicatie en een mobiele app. Hierin zijn ze op zoek naar iemand die de kart wil trekken op dit gebied. Jij gaat dus echt aan de slag als React Native specialist binnen het front-end team. Het begin staat, maar er liggen nog genoeg uitdaging om over mee te denken! De IT-afdeling bestaat momenteel uit 13 back-end developers (verdeeld over verschillende scrumteams), 4 front-end developers en 2 UX-designers. Hiernaast werk je zo nu en dan samen met collega’s van marketing, support en consultancy. De software wordt door vele duizenden professionals dagelijks gebruikt en bevatten

Bekijk vacature »

Front-end developer vacancy (Angular)

Functie As a front-ender you work closely with your colleagues from the back-end to optimally connect to their code (RESTapi). You develop Front-end components including Angular and HTML5. They work according to Scrum, and also use methods like TDD and code reviews to ensure quality. Their IT-department now consists of 4 colleagues, including a CTO, two back-end developers and one front-end developer. What’s great about this small team is that they are all involved in the development of new feautures. A new feauture often starts with a simple sketch and everyone can share his or her opinion during the process.

Bekijk vacature »

Java developer - procesoptimalisatie (Inhouse)

Functie Wat ga je doen als Java developer? Jij als back end developer hebt al enige ervaring opgedaan in jouw vakgebied. Voornamelijk het werken met Java en Spring spreekt jou aan. Jij wordt samen met je collega developers in het team verantwoordelijk voor de gehele back end van de applicatie. Hierdoor heb jij veel zelfstandigheid in je rol en zul je ook zelf beslissingen samen met de PO maken. Er wordt gewerkt volgens de SCRUM methodiek, om zo structuur te creëren in de werkzaamheden. Binnen de 2-wekelijkse sprints pak jij je taken op die samen met de PO afgestemd zijn.

Bekijk vacature »

Junior Robot Programmeur

Bedrijfsomschrijving: Locatie: regio Haarlem Deze organisatie ontwikkelt, test & released robots en verzorgt het product lifecycle management, vanaf potloodschets tot implementatie. Producten worden geschikt gemaakt voor seriefabricage. Als Junior Robot Programmeur werk je samen met de Product Engineers, Cost Engineers, Test Engineers, Process Engineers en Workshop Technicians. Ze streven naar robuuste producten die onder uitdagende omstandigheden, over de hele wereld goed blijven functioneren. Lijkt het jou leuk om dagelijks met innovatie bezig te zijn en robots te ontwikkelen in een multidisciplinair team met een projectmatig karakter? Wil je als Junior Robot Programmeur meewerken aan het ontwerpen en ontwikkelen van state

Bekijk vacature »
Ozzie PHP

Ozzie PHP

11/06/2014 10:23:41
Quote Anchor link
Hey guys,

Een kort vraagje. Mogen onderdelen van een framework vertrouwen op defines? Stel je hebt een kernel class en die heeft het root path nodig. Vevolgens zijn er nog een paar andere classes die ook het root path gebruiken. Nu kan ik aan de constructor van de kernel class het root path meegeven. Vervolgens geeft de kernel class het root path weer door aan andere classes. Dat is optie 1. Ik vraag me nu af of het oké is om alvorens de kernel class aan te roepen het root path te definen en dan in de kernel class en op overige plekken waar het nodig is gebruik te maken van de defined constant. Dus in plaats van telkens via de constructor het root path door te geven, define je het root path eenmalig en gebruik je overal die constant. Is dat oké?
Gewijzigd op 11/06/2014 10:29:36 door Ozzie PHP
 
PHP hulp

PHP hulp

08/02/2023 15:28:28
 
Ward van der Put
Moderator

Ward van der Put

11/06/2014 10:58:15
Quote Anchor link
Ja, ik vind dat dit moet kunnen.

Je moet per slot van rekening ergens beginnen, anders wordt configureren een onoplosbaar kip-en-eiprobleem. Om bijvoorbeeld iets te kunnen laden met een autoloader, moet je eerst de autoloader zelf laden en dus expliciet declareren wáár die te vinden is.

Definieer je niet expliciet constanten, dan is er altijd nog een standaardconfiguratie waarop veel standaardklassen impliciet blindvaren of terugvallen: php.ini. Daar heb je dus nog wel een keuze. Bijvoorbeeld verbindingsparameters voor de databaseserver kun je in constanten of in php.ini vastleggen.
 
Ozzie PHP

Ozzie PHP

11/06/2014 11:06:45
Quote Anchor link
Oké, thanks.

Maar het is dus niet "fout"?

Eerst deed ik dus bijv. dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$root_path
= dirname(__DIR__);
...

$kernel = new Kernel($root_path);
?>

En nu zou ik dan gewoon dit doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
define('ROOT_PATH', dirname(__DIR__));
...

$kernel = new Kernel();
?>

Het is dus niet "verkeerd" dat die kernel vertrouwt op een defined constant die buiten de class wordt aangemaakt?
Gewijzigd op 11/06/2014 11:07:57 door Ozzie PHP
 
Ward van der Put
Moderator

Ward van der Put

11/06/2014 11:17:39
Quote Anchor link
Klassen die van buitenaf geconfigureerd moeten worden, zijn onvermijdelijk; denk bijvoorbeeld maar aan databaseconnecties.

Je kunt zo'n declaratie beter wel expliciet maken, dus die ergens in het script uitschrijven. Of je plaatst de volledige configuratie centraal in één gemeenschappelijk config.ini of in een gedeelde interface, als het maar logisch, duidelijk en consistent is. Je wilt geen class Kernel in Kernel.php hebben die achter de schermen en daarmee onzichtbaar iets uit een kernel.ini gebruikt.
 
Ivo P

Ivo P

11/06/2014 11:19:32
Quote Anchor link
Ozzie was toch laatste bezig met een class waarin allerlei constanten gedefinieerd werden?

Ik dacht dat dat als container zou gaan dienen, voor wat je nu weer anders benadert.

Toevoeging op 11/06/2014 11:22:01:

kan het topic niet terug vinden
 
Joakim Broden

Joakim Broden

11/06/2014 11:24:05
Quote Anchor link
Zelf gebruik ik die defines als fallback. Ik heb een config class, en daar staan alle defines in (als het goed is ;-)). Zo kan ik alles via de config aanroepen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $config
->get('root_path', ROOT_PATH);
?>

Eerste param is de key van de config array, bestaat hij niet dan geeft hij de 2de param terug.
Gewijzigd op 11/06/2014 11:25:03 door Joakim Broden
 
Ozzie PHP

Ozzie PHP

11/06/2014 11:29:12
Quote Anchor link
>> Klassen die van buitenaf geconfigureerd moeten worden, zijn onvermijdelijk; denk bijvoorbeeld maar aan databaseconnecties.

Goed punt. Maar inderdaad. Zo'n configuratie zou ik in een apart bestand zetten. Maar een root path heb je op diverse plekken nodig, daarom is een define in dit geval wel mooi denk ik.

>> Ozzie was toch laatste bezig met een class waarin allerlei constanten gedefinieerd werden?

Ik gebruik wel een container, en daar komen ook paden in. Maar om die te maken, moet ik wel eerst een root path hebben :)

Zo'n root path heb je op een paar plekken nodig. Mijn 1e gedachte was dus om een variabele te gebruiken en die door te geven aan de constructor van de kernel, en de kernel geeft 'm dan weer door aan de class die de absolute paden aanmaakt. Maar wat er dus gebeurt is dat ik telkens dat root path via de constructors loop door te geven. Een define is dan denk ik handiger.
 
Dos Moonen

Dos Moonen

11/06/2014 11:46:27
Quote Anchor link
Houd wel rekening met namespaces: http://3v4l.org/GlqSD
Vanaf PHP 5.6 kun je functies en contanten importeren: https://wiki.php.net/rfc/use_function
 
Ozzie PHP

Ozzie PHP

11/06/2014 13:23:43
Quote Anchor link
Geinig, ik wist niet dat je ook op namespace niveau kon definen. Dat kan nog wel eens van pas komen.

Thanks!
 
Wouter J

Wouter J

11/06/2014 18:01:14
Quote Anchor link
Elke functie, of het nou een klasse functie is of iets anders, mag NOOIT iets van de context gebruiken1. Het mag zelfs niks van de context weten. Op deze manier ben je namelijk volledig afhankelijk van die context.

Dat is precies de rede waarom je superglobals niet in functies moet gebruiken, waarom het "global" keyword uit den boze is en waarom "passed by reference" zo verkeerd is. Aan dat rijtje mag je nu ook toevoegen: Het gebruik van globale constanten in een functie.

1) Er zijn hier uitzonderingen voor, de zogenaamde IO functies, maar die kom je maar zelden tegen. Dat is bijv. de echo functie (als dat een functie zou zijn) en een fwrite functie.
 
Ozzie PHP

Ozzie PHP

11/06/2014 21:07:17
Quote Anchor link
Jij bent dus TEGEN het gebruik van defines als ik je goed begrijp?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/06/2014 22:09:15
Quote Anchor link
Nee Wouter is niet tegen defines. Wat wouter zegt is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
define("CONSTANT", "Hello world.");

function
shoutOut($text)
{

    echo '<b>' . $text . '</b>';
}


shoutOut(CONSTANT);
?>


en niet dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
define("CONSTANT", "Hello world.");

function
shoutOut()
{

    echo '<b>' . CONSTANT . '</b>'; // fout: constante in een functie!
}

shoutOut();
?>
 
Ozzie PHP

Ozzie PHP

11/06/2014 22:13:04
Quote Anchor link
@Frank

Ben jij het daar mee eens? Bij mij gaat het enkel dan om een ROOT_PATH constant die ik op een paar plaatsen nodig heb om bijv. configuratiebestanden in te lezen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/06/2014 22:15:51
Quote Anchor link
Zie een define als een soort automatische copy & paste functie.
Nog voor de compilatie (in talen als C) en uitvoering van het programma worden de constanten vervangen door de tekst/waarde waar de constante voor staat.

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
// jouw code
define("CONSTANT", "Hello world.");
echo CONSTANT;

//   |
//   |
//   V

// PRECOMPILER

//   |
//   |
//   V

// resultaat:

echo "Hello world.";

?>


Toevoeging op 11/06/2014 22:21:36:

Ik vind een root path meer een configuratie variabele die door een gebruiker (lees systeembeheerder) nog aangepast mag worden. Indien jij van mening bent dat dat in jou geval er NOOIT een reden zal zijn waarbij de root path zal hoeven te wijzigen (door iemand anders dan de programmeur zelf) dan kun je deze prima met een define aanmaken.

Wat ik bedoel te zeggen is dat een define iets in de programmacode is en dus nooit meer gewijzigd kunnen worden door mensen die niet bij de source kunnen.
 
Ozzie PHP

Ozzie PHP

11/06/2014 22:24:42
Quote Anchor link
>> Indien jij van mening bent dat dat in jou geval er NOOIT een reden zal zijn waarbij de root path zal hoeven te wijzigen (door iemand anders dan de programmeur zelf) dan kun je deze prima met een define aanmaken.

Nee, een root path is een root path toch :) Daar hoeft inderdaad niemand anders dan de programmeur bij te komen. Dus in dat geval geen probleem begrijp ik?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/06/2014 22:27:19
Quote Anchor link
goede voorbeelden van defines zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
define("DB_PREFIX", "ozzie_");
define("PI", 3.14159265359);
define("SUPERADMIN_PASSWORD", "llZMPyQSu+nPNmXPa78HbpbRRwNOypjFeZP5izOmHiDjmns/QJrCJkUqnkCSHeQoBWNakj/RYykd6/E33vFDJA==");
?>
 
Wouter J

Wouter J

11/06/2014 22:29:00
Quote Anchor link
>> Dus in dat geval geen probleem begrijp ik?

Zie hier het framework zelf en het project waarin je het gebruikt als 2 andere dingen. Wanneer het binnen het framework *altijd* (dus in ieder project) hetzelfde is, dan nog zou ik het niet doen, maar dan zou Frank zeggen: doen. Wanneer dit niet het geval is en je het per project moet veranderen dan zijn Frank en ik het met elkaar eens: Niet doen
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/06/2014 22:31:09
Quote Anchor link
Als je écht zeker weet dat het nooit zal veranderen en vast in je sourcecode mag komen te staan dan is het goed maar dat bevreemd mij nogal.. Ik kan me situaties indenken waarin je een root-path toch wilt wijzigen. Denk maar eens aan de overstap van een windows-server naar een linux-server.
 
Ozzie PHP

Ozzie PHP

11/06/2014 22:36:10
Quote Anchor link
>> Wanneer het binnen het framework *altijd* (dus in ieder project) hetzelfde is, dan nog zou ik het niet doen, maar dan zou Frank zeggen: doen.

Wouter, waarom zou jij het niet doen? Het alternatief is het doorgeven via de constructor. Dat is toch ook een beetje overkill? Het is een vaste waarde die verder niet hoeft te worden aangepast. Ik ben het volledig met je eens dat je het in 99% van de gevallen niet moet doen, maar hier zou het toch kunnen lijkt me.

>> Ik kan me situaties indenken waarin je een root-path toch wilt wijzigen. Denk maar eens aan de overstap van een windows-server naar een linux-server.

Je kan een root path van je framework dynamisch genereren, bijv: define('ROOT_PATH', __DIR__)

Of define('ROOT_PATH', '/path/to/framework')

Waarom zou je een root path willen wijzigen... snap niet helemaal wat je bedoelt :(
 
Wouter J

Wouter J

11/06/2014 22:40:17
Quote Anchor link
>> Waarom zou je een root path willen wijzigen... snap niet helemaal wat je bedoelt :(

Goed, hij was eerst:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
define('ROOT_PATH', 'C:/Users/Ozzie/projects/een-bedrijf');
?>


Nu verplaats je naar een linux server en tada:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
define('ROOT_PATH', '~/projects/een-bedrijf');
?>


>> Het is een vaste waarde die verder niet hoeft te worden aangepast.

Oh nee? Ik zal altijd aanraden om in productie de ROOT buiten de web root te laten vallen. Tadaa: dat is al wat anders dan in een development omgeving.
 
Ozzie PHP

Ozzie PHP

11/06/2014 22:49:36
Quote Anchor link
>> Nu verplaats je naar een linux server en tada:

Ja, dan pas je 'm toch eenmalig aan in je index.php? Het gaat erom dat je 'm eenmalig defined (hoe je dat doet boeit toch niet?)

>> Oh nee? Ik zal altijd aanraden om in productie de ROOT buiten de web root te laten vallen. Tadaa: dat is al wat anders dan in een development omgeving.

Wat bedoel je nu? Kun je dit toelichten? Ik snap echt even niet wat je bedoelt. Onder de root map, versta ik de map waarin de public en de private directory staan.
 



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.