pjdevries / PIM

PHP Intelligence Meetup
0 stars 0 forks source link

Nuttige (nieuwe) PHP features #9

Open pjdevries opened 1 year ago

pjdevries commented 1 year ago

Algemeen

Per PHP versie

pjdevries commented 1 year ago

@HermanPeeren en @roland-d Wat vinden jullie van bovenstaande lijst? Te veel, te weinig, precies genoeg, beetje overdreven, tot nu toe door niemand om gevraagd, ...? (Hoe) gaan we die verdelen?

roland-d commented 1 year ago

@pjdevries Ik vind het een veel te lange lijst. Zeker een interessante lijst maar ik denk dat het behalve ons 3 voor de meeste boven de pet is. Mijn idee zou zijn om de lijst te consolideren tot meer/veel gebruikte/nuttige opties, om wat voorbeelden uit de lijst te pakken:

Ik mis nog wat nieuwe functies zoals de str_contains

My 2 cents

pjdevries commented 1 year ago

@roland-d Ja hij is lang en mijn bedoeling was niet de hele lijst af te werken, tenzij daar behoefte aan is. Als @HermanPeeren ook zijn blik er over laat gaan en suggesties doet, dan stellen we een definitieve lijst op die we onderling verdelen.

pjdevries commented 1 year ago

@roland-d Ik heb str_contains(), str_starts_with() en str_ends_with() onder 8.0 toegevoegd.

pjdevries commented 1 year ago

@HermanPeeren, @roland-d Wat doen we hiermee?

roland-d commented 1 year ago

Als @HermanPeeren ook zijn blik er over laat gaan en suggesties doet, dan stellen we een definitieve lijst op die we onderling verdelen.

De definitieve lijst opstellen?

pjdevries commented 1 year ago

@roland-d Jij vond de lijst aan de lange kant. Een definitieve zou dan korter moeten zijn, toch?

roland-d commented 1 year ago

@pjdevries Ik heb toch een kortere lijst doorgegeven?

pjdevries commented 1 year ago

@roland-d Ik realiseerde me niet dat jij jouw kortere lijst als definitief had bestempeld. Vandaar de vraag aan @HermanPeeren er ook zijn blik over te laten gaan.

Zeker een interessante lijst maar ik denk dat het behalve ons 3 voor de meeste boven de pet is.

Ik vond dit ook wat kort door de bocht, want we zitten met wat slimme luitjes bij elkaar. Maar zelfs als je gelijk hebt, is dat niet juist waarvoor deze dag aanvankelijk was bedoeld?

De lijst die ik heb opgesteld, komt voort uit wat ik als nuttig ervaar of het bestaan ervan nuttig vind. Dat zou dus ook voor anderen het geval kunnen zijn. Misschien zelfs voor jou :grin: Maar dat de lijst voor het praktische misschien wat aan de lange kant is, ben ik met je eens. Vandaar de vraag of @HermanPeeren er ook eens naar wil kijken om tot een definitieve lijst te komen. Zelf mis ik er in jouw lijst er ook nog enkelen, waarvan ik denk dat ze heel nuttig kunnen zijn.

HermanPeeren commented 1 year ago

Ik zou niet van die losse punten willen behandelen, maar thematisch te werk gaan. Als ik een beetje uit de losse pols tel valt bijna 40% van de grote lijst van @pjdevries onder het thema "typing & scoping". Dat is denk ik ook het hoofdthema van veranderingen in de versies van PHP sinds 5.6. Ik stel dus voor dat we op de bijeenkomst een verhaal houden over typing & scoping en daar allerlei punten van de lijst in te gebruiken. In context wordt het duidelijk wat het belang van die features is. De strict_types-declaratie past ook in dit verhaal. Misschien een idee voor een leuk verhaal: proberen om foute voorbeelden te maken zonder gebruik van die features, die voorkomen kunnen worden door wel stricter te typeren of de scope te beperken (maar ja, is wel weer extra werk; ik weet voor mezelf niet of ik er tijd voor heb).

Andere thema's zouden kunnen zijn:

En een onderwerp dat ik leuk vind: composability met anonymous functions, closures & arrow-functions.

Ik denk dat allerlei losse features zonder context (thema) een beetje verloren gaan. Of misschien kunnen in 1 rest-onderwerp "moet je kijken wat handig dit is" toch nog even allerlei losse handigheidjes of syntactic sugar behandeld worden. Dan wel liefst met een voorbeeldje van code zonder die feature en met.

pjdevries commented 1 year ago

Thematisch groeperen vind ik op zich een goed idee, al wil ik de relatie met de PHP versie wel behouden. Maar zoals je zelf al opmerkt, zoiets bruikbaar voorbereiden kost extra tijd en dat is niet iets waar we allemaal veel van over hebben. Ik zou het ook een uitdaging vinden.

HermanPeeren commented 1 year ago

Ik zei niet dat het bruikbaar voorbereiden extra tijd kost, maar het maken van foute voorbeelden en laten zien hoe stricter typing en scoping die fouten kan voorkomen. "Bruikbaar voorbereiden" kost wel tijd, maar is altijd nodig (anders is het niet bruikbaar/nuttig), dus geen extra tijd.

Ik had op jouw lijst even voor mezelf aangemerkt wat (enigszins) met typing en scoping te maken had en als je die onderwerpen samenpakt, dan komt er al bijna vanzelf een "verhaaltje" uit, een samenhang tussen die verschillende punten.

HermanPeeren commented 1 year ago

Mijn voorstel is om eerst van die typing & scoping features (en er enigszins mee samenhangende dingen, die aan dat thema opgehangen kunnen worden) een geheel te maken en de rest even te laten zitten. Dan over een paar weken weer eens kijken hoe dat ervoor staat en wat we van de rest nog oppakken. Beter 1 onderwerp wat grondiger uitdiepen dan alles half doen.

Misschien een taakverdeling voor dat uitwerken, zodat we er met meerderen aan kunnen werken? Waarbij opgemerkt, dat ik t/m 15 november erg weinig tijd heb (maar kan altijd mijn gedachten alvast over een deelonderwerp laten gaan). Mogelijke deeltaken bij dat ene thema:

Dit is maar een voorstel, hoor. Hoe ik het aan zou pakken. Als je liever toch een keuze uit je lijst wil maken en die punten uit wil werken, dan moet je dat zeker doen! :-) Ik beperk me voorlopig alleen tot typing & scoping (maar zoals ik al zei, dekt dat ongeveer 40% van je lijst).

pjdevries commented 1 year ago

Ik ga mijn best doen de lijst opnieuw te organiseren naar thema. Daarna zien we wel verder.

@roland-d Wat vind jij van @HermanPeeren's idee?

HermanPeeren commented 1 year ago

Zoiets qua thema Typing & Scoping:

Algemeen

Per PHP versie

roland-d commented 1 year ago

Het idee van het groeperen op thema vind ik een prima idee. Ook de groep die Herman noemt typing & scoping vind ik een goede. Het is denk ik ook een groep waarmee je de hele dag wel kan vullen als je het over niets anders wil hebben :) De lijst hierboven lijkt mij prima. Ook ik weet ze niet allemaal uit het blote hoofd als ik de lijst zie :/

Toch wil ik het thema new functions niet laten vallen. Dat zal een aanzienlijk kortere lijst zijn.

HermanPeeren commented 1 year ago

Ik heb Enums ook bij de types gezet en (ook van 8.1) First Class Callable syntax.

Ik heb die Null-safe operator even weggehaald uit die typing-list en dacht aan een aparte rubriek null-handling, met de volgende items van @pjdevries z'n lijst:

Per PHP versie

Maybe (pun intended) met een klein uitstapje naar functional programming (in PHP uiteraard) met een Optional type/object/function. Maar waarschijnlijk zijn jullie het daar niet mee eens, want dan dwalen we wat te veel af... voor een andere keer dan. Zie https://auxiliaire.medium.com/perhaps-functional-programming-in-php-part-5-163f88c811cf . Zie ook Scott Wlaschin's artikel over "Railway Oriented programming" https://fsharpforfunandprofit.com/rop/

HermanPeeren commented 1 year ago

Misschien zijn de new functions vooral new text-processing functions. Uit PJ's lijst:

Maar wellicht zijn er meer.

pjdevries commented 1 year ago

Hangt er een beetje vanaf wat je onder nieuw verstaat :grin:

HermanPeeren commented 1 year ago

Ik zoek vooral naar het embedden van losse functies in een context. In dit geval: tekst manipulatie. Wat wil je bereiken en hoe krijg je dat voor elkaar (kookboek-recepten).

Soms volstaan eeuwenoude ingrediënten in een recept, soms is iets nieuwsers handiger.

pjdevries commented 1 year ago

Ik heb Enums ook bij de types gezet en (ook van 8.1) First Class Callable syntax.

Vanwaar de keuze om de First Class Callable syntax bij de Types & Scoping onder te brengen?

pjdevries commented 1 year ago

In navolging van @HermanPeeren's aangepaste lijst, heb ik de vrijheid genomen de gehele lijst vergelijkbaar te herorganiseren. Ik heb echter moeite om de lijst in te delen op conceptuele topics, zoals die @HermanPeeren opsomt: toekomstbestendig, geheugen en grote bestanden, modulaire opbouw, cross-cutting concerns, etc. Niet alleen vergt dat veel meer tijd en aandacht om voor te bereiden, maar ik denk dat het ook veel extra tijd in de besprekning tot gevolg heeft. Uiteraard staat het ons allemaal vrij om interessante voorbeelden binnen zo'n conceptuele context te maken. De lijst is dus vooral PHP topic specifiek gegroepeerd.

Ik ben ook zo eigenwijs geweest om First Class Callable Syntax niet onder typing & scoping onder te brengen. Het lukt me niet dat te beredeneren en @HermanPeeren heeft nog niet toeglicht waarom hij het daar heeft ondergebracht.

Als laatste heb ik, met het oog op de release in november, ook wat nieuwe PHP 8.3 features aan de lijst toegevoegd.


Topics

Algemeen

Typing & Scoping

NULL handling

New operators

Array handling

String handling

Classes & Functions

Attributes

Other stuff

PHP new features

pjdevries commented 1 year ago

@roland-d, @HermanPeeren Ik stel voor dat we een definitieve onderverdeling maken, wie welke topics uit de lijst oppakt. Laten we daarbij en bij de voorbereiding niet uit het oog verliezen dat we beperkte tijd hebben en dus efficient moeten zijn. Dit is immers slechts één van de 13 issues die voor de komende meetup op de lijst staan om behandeld te worden.

pjdevries commented 1 year ago

@roland-d, @HermanPeeren Ik heb het onderwerpenoverzicht onder de naam Topics.md in de repo gecommit.

pjdevries commented 1 year ago

@roland-d, @HermanPeeren Ook een eerste voorbeeld in de repo gezet. Alleen niet m.b.t. dit issue :grin:

HermanPeeren commented 11 months ago

@pjdevries schreef:

Ik ben ook zo eigenwijs geweest om First Class Callable Syntax niet onder typing & scoping onder te brengen. Het lukt me niet dat te beredeneren en @HermanPeeren heeft nog niet toeglicht waarom hij het daar heeft ondergebracht.

Zie ik nu pas 😅. Is natuurlijk prima, kan op verschillende manieren ingedeeld worden, is maar net wat je als kapstokje wil gebruiken. Ik was uitgegaan van: "CallableExpr(...) has the same semantics as Closure::fromCallable(). That is, unlike callable using strings and arrays, CallableExpr(...) respects the scope at the point where it is created".

Maar als je een aparte rubriek Classes & Functions hebt, dan kun je het ook daar onder brengen.