[Feature] Magic methode om object naar integer te casten
Door
Jetse Jacobi
op 10-06-2016 10:52
gewijzigd op 20-06-2016 09:56
2.356 views
Php 7 wordt steeds meer OOP, waardoor ik nu echt een magic methode mis om een eigen IntegerObject naar een integer kan casten. Kan er in een volgende release net als een __toString() methode een __toInt() of __toInteger() methode aangemaakt worden die aangeroepen wordt op het moment dat je objecten bij elkaar op wilt tellen of door elkaar wilt delen?
Je bericht staat om meerdere redenen op de verkeerde plaats:
* De medewerkers van dit forum hebben geen zeggenschap over de werking van PHP :). Dit is een community-site voor het uitwisselen van informatie / het stellen van vragen over PHP. Dit is een gebruikersplatform.
* De rubriek "bugs & feature request" betreft specifiek bugs en feature requests van het forum zelf. Dit gaat niet over de intrinsieke werking van PHP.
Dat gezegd hebbende. Waarom zou je een object willen introduceren voor een integer? Integer is al een type in (o.a.) PHP. Daarnaast is PHP redelijk type agnostisch en voert zelf conversies uit indien dit nodig is. Of handmatig/expliciet via een typecast middels (int) $var. En tot slot is PHP een hybride taal, zodat je ... eh... *kuch* "the best of both worlds" hebt :). Je kunt je integers ook gewoon integers laten zijn?
Omdat ik graag van een integer wil kunnen overerven. Ik maak gebruik van value objects, die controles uitvoeren op het moment dat je ze aanmaakt. Dus dat ik alleen maar in de constructor van dit object de is_numeric() hoef aan te roepen. En in de childClass Afstand alleen maar de isValid() methode hoef te overschrijven met een check of deze waarde boven de 0 is, en een __toString methode waarin de meters automatisch naar km en m omgerekend wordt. En om de snelheid te berekenen wil ik dan gewoon dit Afstand object kunnen delen door een Tijd object.
Ik denk dat ik ongeveer volg wat je probeert te bereiken. Ik weet echter niet of dit de beste/eenvoudigste manier is. En "Afstand" als child class van "Integer"? I dunno man...
Deze numerieke grootheden lijken mij meer eigenschappen van een (ander?) object (dit puzzelstuk ontbreekt mogelijk nog)?
Natuurlijk is het belangrijk om input te filteren (te controleren of je daadwerkelijk met numerieke waarden van doen hebt), maar dat wil niet zeggen dat je hiervoor allemaal objecten nodig hebt? PHP is geen OOP taal pur sang.
Ik gebruik dit type value object zelf ook met een duidelijke reden: MySQL heeft veel meer typen integers dan PHP. Dan is een hiërachie van value objects die uit de voeten kunnen met signed versus unsigned, wel of geen 0 en verschillende maxima wel handig.
De methode __toString() voldoet daarbij echter prima, omdat de value objects uiteindelijk toch in een string belanden voor SQL. De waarden op zich hebben weinig betekenis; je moet ze in de ruimere context van SQL zien.
Voor een afstand zou ik echter geen child van een integer gebruiken: dat is spatial data en die kun je vaak beter anders modelleren. Een afstand is op zich namelijk ook niets, maar iets dat wordt bepaald door een beginpunt, een eindpunt en de rechte lijn of polygoon die beide punten verbindt.
Je bericht staat om meerdere redenen op de verkeerde plaats:
* De medewerkers van dit forum hebben geen zeggenschap over de werking van PHP :). Dit is een community-site voor het uitwisselen van informatie / het stellen van vragen over PHP. Dit is een gebruikersplatform.
* De rubriek "bugs & feature request" betreft specifiek bugs en feature requests van het forum zelf. Dit gaat niet over de intrinsieke werking van PHP.
We stellen het zeer op prijs als je in het vervolg een bericht naar het moderatie-meldpunt zou kunnen sturen.
Anyway, dit topic is nu verhuisd naar de juiste plek.
?
Onbekende gebruiker
20-06-2016 14:13
Ik mis nog wel meer aan PHP (bv. multiple inheritance), maar je moet het er gewoon mee doen (traits gebruiken).
Uiteindelijk telt wat je hebt gemaakt het meest, niet zozeer het technische hoe.