[OOP] PHP-sessie als gemeenschappelijke data store
De package moet kunnen worden gebruikt binnen uiteenlopende frameworks, CMS'en en webwinkelplatforms — die in de regel allemaal een eigen implementatie van sessie hebben. Is er een "best practice" om zonder conflicten met bestaande sessies data in een sessie op te slaan?
Ik omzeil het nu met bijvoorbeeld:
$_SESSION[__CLASS__]['Foo'] = $this->Foo;
zodat via __CLASS__ een redelijk unieke namespace\class-variabelennaam ontstaat. Kan dat ook anders en vooral beter?
Hoeveel classes die een sessie gebruiken zitten er in het package?
Ozzie PHP op 09/12/2013 10:18:44:
Hoeveel classes die een sessie gebruiken zitten er in het package?
Een handvol, maar ze slaan weinig meer op dan een transactie-ID, een statusregel of een kleine array.
Het gaat concreet om online betalingen. Ik kan daarin op bijvoorbeeld een cURL-request besparen door iDEAL-issuers (banken) maar één keer op te halen en te cachen. De gekozen issuer moet bij een volgend verzoek namelijk voorkomen in de eerder gepresenteerde lijst, dus kun je daar op een tweede cURL-request besparen.
$_SESSION['wvdp_payment_package']['Foo'] = $this->Foo;
$_SESSION[__NAMESPACE__]['Foo'] = $this->Foo;
Op zich kan de klasse ook wel. Elke betaalmethode is een klasse, maar het zal zelden voorkomen dat tijdens een sessie verschillende betaalmethoden tegelijk worden gekozen.
Dat zou kunnen. Hou er alleen wel rekening mee dat dat pas vanaf versie 5.3 werkt. In oudere PHP versies zou het dan mis gaan.
Ozzie; 5.2 wordt niet meer ondersteund door PHP zelf, dus imho hoeft een ontwikkelaar daar géén rekening meer mee te houden. Zéker niet als het te maken heeft met betalingen moeten zowel de server als de software up-to-date blijven. Aangezien sommige hosters/ontwikkelaars daar zelf weinig aan doen, kun je ze op deze manier wakker schudden :)
dan is __CLASS__ al de string 'BetaalProvider\iDEAL', dus inclusief namespace. Het blijft ook 'BetaalProvider\iDEAL' als je bijvoorbeeld use BetaalProvider\iDEAL as Payment zou gebruiken. Kun je daarmee blindvaren op __CLASS__ of moet je vanaf bepaalde PHP-versie toch nog __NAMESPACE__ in de mix gooien?
Quote:
As of PHP 5 this constant returns the class name as it was declared (case-sensitive). In PHP 4 its value is always lowercased. The class name includes the namespace it was declared in (e.g. Foo\Bar).