Bundel Acties

Door Emiel Klein , 20 jaar geleden, 3.256x bekeken

Ongeveer iets meer dan een jaar ben ik nu redelijk serieus met php bezig en hier geregistreerd. Desalniettemin heb ik nooit wat gepost en log ik bijna nooit in.

Gezien ik hier toch veel heb opgestoken en ook wel eens wat kritiek wil ontvangen op mijn classes post ik deze. Ik ben beniewd hoe jullie hem vinden.

De class is geschreven vanuit de behoefte dat ik bij het ontwerpen van een cms, modules wilde laden en de functies van die modules wilde kunnen toevoegen aan bepaalde punten in het systeem.



---------------------------------------------------------------------

Deze class maakt het mogelijk acties te bundelen. Het is dus een soort geheugen waar je acties (functies, methoden etc) in kunt bewaren zodat ze allemaal tegelijk kunnen worden uitgevoerd op een specifiek moment.
Stel dat je modules laadt ergens in de header van je cms die functies bevatten die je later uitgevoerd wilt hebben dan komt dit vast van pas.
Ook kun je je shutdown functies hierin bewaren en dit cluster alles laten uitvoeren wat er in het shutdown object bevind.
Dit maakt het mogelijk om via een kleine omweg shutdown functies te registeren en te unregisteren, iets dat niet mogelijk is met php's standaard functies.

Voor extra flexibiliteit is er de mogelijkheid om acties te bundelen in verschillende sequenties, zodat functies kunnen worden uitgevoerd in de gewenste volgorde.
Binnenin de sequenties worden de acties uitgevoerd in de volgorde dat ze zijn toegevoegd aan de class.

Neem voor gedetailleerde informatie het script zelf door.


--------------
* Update 26-05-07

Heb de kritiek van Jelmer er in verwerkt. Verschillende functies voor het toevoegen aan een sequence en de default sequence.

Gesponsorde koppelingen

PHP script bestanden

  1. bundel-acties

 

Er zijn 8 reacties op 'Bundel acties'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Hipska BE
Hipska BE
20 jaar geleden
 
0 +1 -0 -1
de methode initialise is overbodig, je kan gewoon zo doen:
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
<?php


    
    class ActionCluster {

        var
    $actions = array();         //     (array)    Actions storage
        var    $sequences = array();   //     (array)    Sequence storage
        var    $seq = 1;        //     (int)    Default sequence
        var    $id = 1;         //    (int)    The id counter

        
        // Constructor

        function ActionCluster() {                
            // constructor is leeg, mag zelf weggelaten worden
        }
        
        ...
        
    }

?>
Martijn Wieringa
Martijn Wieringa
20 jaar geleden
 
0 +1 -0 -1
Ik vind een officiele initialisatie functie juist een heel nette aanpak.

Wat me wel opvalt is de notatie bij je 'foreach' lus.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
foreach($array as $key => $value):
...
endforeach;


Ik definieer het liever als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
foreach($array as $key => $value)
{
    ...
}


Verder weinig op te merken, code ziet er leesbaar uit en het commentaar prima.
Hipska BE
Hipska BE
20 jaar geleden
 
0 +1 -0 -1
@pholeron: ok, dat is ook wel nog goed, maar dan kunnen ze beter meteen in de constructor staan. De methode initialize() is overbodig.
Rudie dirkx
rudie dirkx
20 jaar geleden
 
0 +1 -0 -1
1. Hoe je je foreach gebruikt moet je natuurlijk zelf weten, maar vind het wel slordig dat je de ene keer de : en end* gebruikt, en de andere keer gewoon {}.
2. En het ligt vast aan mij, maar wat is precies het nut van de delete functie? Je gaat toch niet een functie toevoegen en daarna weer verwijderen in 1 stuk code??
Ook het nut van de rest is mij een beetje wazig, maar dat ligt zeker aan mij.

Edit:
Hoezo is de initialisatie functie officieel? Denk je niet dat PHP zoals het is precies officieel is, omdat het zo is?! Als de constructor van een class __construct heet, is de officiele naam van de constructor toch __construct? Hoezo officieel?
K i p
K i p
20 jaar geleden
 
0 +1 -0 -1
Het is goed om variabelen buiten de quotes te houden. En als je enkele quotes gebruikt hoef je $variabelen niet te escapen als je echt het dollarteken wilt laten zien op het scherm. Dus:
79. trigger_error("\$id <code>$id</code> could not be found in sequence");
zou dan worden:
79. trigger_error('$id <code>' . $id . '</code> could not be found in sequence');
Emiel Klein
Emiel Klein
20 jaar geleden
 
0 +1 -0 -1
Het gebruik van de ene keer : en end; en een andere keer wel gewoon {} is omdat ik het persoonlijk overzichtelijker vind om in een stukje code op het laatst niet teveel } } en nog meer } te krijgen :-)

Zo blijft het een beetje duidelijker wat je precies aan het sluiten bent met de }'s. Maar wellicht hier wat overbodig idd.

@ T Vercetti
Over het algemeen vind ik het gewoon netjes dat als je iets kunt toevoegen je het ook weer kunt verwijderen. Het is vast wel eens zo dat je het zou willen doen. Kan zo ook niet direct een concreet voorbeeld bedenken, behalve bij het registeren van shutdown functies.
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
Dus als ik het goed begrijp is het een soort implementatie van het observer-pattern, maar dan zonder het idee dat er achter het observer-pattern zit, en dan weer met de mogelijkheid een prioriteit te geven aan een 'callback'.

Paar kleine opmerkingen. Zou het niet handiger zijn om 2 methoden te maken, add() en addToSequence()? Want nu heb je 1 methode, maar eentje met een optionele parameter, aan de voorkant! Dat is niet ideaal. Denk aan IDE's die argumenten kunnen aanvullen. Die slikken deze manier niet. Daarnaast is het een ongeschreven regel om optionele argumenten achteraan te doen. Ik snap dat dat moeilijk gaat aangezien je argumenten door wilt laten geven aan de callback. Vandaar dan maar 2 methoden. Gewoon addToSequence() de inhoudt van add() geven (behalve dat je dan de eerste parameter, $seq, verplicht maakt) en add() een wrapper maken voor addToSequence() met als toegevoegde waarde dat add() voor je uitrekent aan welke sequence hij moet worden toegevoegd.

En je controleert in launch(), in de 2e foreach-lus of 'action' wel bestaat. Op zich niets mis mee, maar is er dan een situatie waarin deze niet bestaat? Of is het gewoon extra zekerheid (waar op zich helemaal niets mis mee is).

Wat ik echter wel en beetje raar vind is dat waneer hij niet bestaat, je alle lussen onderbreekt, en TRUE teruggeeft, wat impliceert dat alles klaar is zoals het hoort te gaan. In PHP is het een gewoonte false bij fouten terug te geven, niet zoals vooral in C(++) en shell wordt gedaan, waar 1 impliceert dat er iets mis is gegaan. En misschien dat een eventuele foutmelding op zijn plaats is.

En als laatste, je sorteert een kopie van $sequence. Maar het kan op zich toch geen kwaad om de originele array te sorteren? Lijkt mij alleen maar sneller op zich (nog een keer krsort aanroepen is in theorie sneller, en je hoeft geen kopie te maken)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Emiel Klein
Emiel Klein
20 jaar geleden
 
0 +1 -0 -1
Bedankt jelmer voor je goede opbouwende kritiek. Over die optionele parameter aan de voorkant zat ik nogal in mijn maag inderdaad ook gezien ik wel houd van consequent gebruik.

Verder vind ik je commentaar erg nuttig en wanneer de tijd daar is zal ik het aanpassen en het ook op de website hier wijzigen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. bundel-acties

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.