[PHP] zelfde functienamen aanroepen verschil. bestanden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo!
Ik ben bezig om in PHP een automatisch factuur systeem te maken. Dwz, er zijn klanten die bepaalde producten hebben lopen. De bedoeling is dat de kosten hiervan dan dus automatisch gefactureerd worden.

Nu zijn er verschillende modules, bijv. Hosting en SMS-verkeer. Hiervan zijn de kosten dan ook variabel aan de hand van het gebruik. Als ik nu voor een klant zo'n module activeer, wil ik dat er vanzelf een post op de maandelijkse factuur aangemaakt wordt. Maar de module zelf moet de kosten per factuur dan nog bepalen, aangezien die dus variabel zijn.

Mijn idee was om elke module een bestandje te laten maken in zijn eigen directory, bijv factuur_add.php en hierin een functie te zetten die bijv de datum en klantnr als input neemt en omschrijving en kosten returned. Ik de bestandsnaam dan op in de database. De bedoeling is dat bij het maken van een factuur dus alle posten afgelopen worden en deze functie in elk bestandje aangeroepen wordt.

Hierin zit dan ook het probleem, ik kan wel een bestandje includen, maar bij het volgende bestandje komt er natuurlijk een error dat die functie niet geredeclared kan worden.

Om een lang verhaal kort te maken is de vraag dus: hoe zijn vanuit PHP functies met dezelfde naam, die in verschillende bestanden staan aan te roepen? :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom wil je code maken die code genereert om een factuur te kunnen maken? En belangrijker: waarom genereer je die factuur niet gewoon on demand wanneer deze opgevraagd wordt?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Kan je niet beter verschillende classes definieren i.p.v. losse functies? M.b.v. overerving kan je dan toch steeds dezelfde methode in je aanroepende code blijven gebruiken. Hoef je geen code te genereren of bestandsnamen op te gaan nemen in de de database.

Als alleen de prijzen bijv. verschillen dan lijkt met me nog logischer om die in de database op te nemen.

[ Voor 35% gewijzigd door Creepy op 04-01-2009 16:12 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe schreef op zondag 04 januari 2009 @ 16:10:
Waarom wil je code maken die code genereert om een factuur te kunnen maken? En belangrijker: waarom genereer je die factuur niet gewoon on demand wanneer deze opgevraagd wordt?
Zoals je het zegt klinkt het ook wel stom ja :). Ik wil het systeem graag dynamisch houden, andere mensen bouwen ook modules die misschien gefactureerd moeten worden, en het is dat handig als je dan dynamisch je post toe kunt voegen zonder direct de code van het facturatie systeem aan te moeten passen.

En on demand is ook een oplossing, maar ik wil juist naar een systeem toe dat uiteindelijk zelf de facturen e-mailt etc, dus dat je er niks meer aan hoeft te doen.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op zondag 04 januari 2009 @ 16:17:
[...]
Zoals je het zegt klinkt het ook wel stom ja :). Ik wil het systeem graag dynamisch houden, andere mensen bouwen ook modules die misschien gefactureerd moeten worden, en het is dat handig als je dan dynamisch je post toe kunt voegen zonder direct de code van het facturatie systeem aan te moeten passen.
Kan het verkeerd zien hoor, maar een code aanpassen in een dbase lijkt me minder werk dan even een directory aanmaken en daarin wat bestandjes neergooien...
En on demand is ook een oplossing, maar ik wil juist naar een systeem toe dat uiteindelijk zelf de facturen e-mailt etc, dus dat je er niks meer aan hoeft te doen.
Tip, maak het gewoon on-demand. Voor het automatisch emailen etc gebruik je crontabs met cli-php of gewoon wget.

Acties:
  • 0 Henk 'm!

Verwijderd

Je zou misschien dmv eval() de bestanden dynamisch kunnen includen?

Dus bijv.

$module = 'firstmodule';
eval("include '" . $module . ".php'");

Zolang je de directories gelijk maakt aan de modulenamen, zou het moeten kunnen werken. Ik ken de functie eval() verder niet heel goed, maar je zou dit kunnen proberen.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Results 1 - 10 of about 2,930 for "eval is evil". (0.21 seconds)

http://blogs.msdn.com/eri...ive/2003/11/01/53329.aspx

http://www.google.com/sea...al+is+evil%22&btnG=Search
Doe dus eerst research voordat je eval gaat gebruiken.

[ Voor 9% gewijzigd door krvabo op 05-01-2009 10:27 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Verwijderd schreef op maandag 05 januari 2009 @ 10:17:
Je zou misschien dmv eval() de bestanden dynamisch kunnen includen?
En wat is er mis met gewoon
PHP:
1
include_once 'modules/'.$modulename.'.php';

Hier wil je geen evil voor gebruiken.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Sowieso is het helemaal niet nodig dit met eval te doen, het kan gewoon zonder:

PHP:
1
2
$var = 'includeme.php';
include $var;


Overigens ben ik het met Creepy eens dat je hier beter classes voor kunt gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

idd, stom van me... Ik heb een keer eval voor iets soortgelijks gebruikt, maar ik kon me niet meer helemaal herinneren hoe het precies zat.

Acties:
  • 0 Henk 'm!

Verwijderd

krvabo schreef op maandag 05 januari 2009 @ 10:27:
Results 1 - 10 of about 2,930 for "eval is evil". (0.21 seconds)

http://blogs.msdn.com/eri...ive/2003/11/01/53329.aspx

http://www.google.com/sea...al+is+evil%22&btnG=Search
Doe dus eerst research voordat je eval gaat gebruiken.
Even los van de huidige discussie, omdat mensen dit vinden wil het niet zeggen dat eval op zijn tijd niet nuttig is, vind deze opmerkingen altijd een beetje achter de massa aanlopen.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op maandag 05 januari 2009 @ 23:15:
[...]
Even los van de huidige discussie, omdat mensen dit vinden wil het niet zeggen dat eval op zijn tijd niet nuttig is, vind deze opmerkingen altijd een beetje achter de massa aanlopen.
Niet los van de huidige discussie. In deze discussie werd het als een manier geopperd, maar hier is het gewoon echt 100% zinloos en echt evil.

Een eval is gewoon bij definitie "smerige" code, soms is dit nodig. Maar in 999 van de 1000 gevallen dat het gebruikt wordt kan je het ook gewoon netjes oplossen... Maar toch soms is het nodig.

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
Dit zou je absoluut met OOP op kunnen lossen. Je maakt een abstracte class waarin alle standaard-functies staan en dmv uitbreidingen hierop kun je modules maken. Die modules gebruiken dan allemaal dezelfde structuur. Daar kan je dan ook heel gemakkelijk doorheenlopen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//dat is de basis, aan de regels van deze abstracte class moeten alle modules voldoen
abstract class moduleBasis{
    public function gebruikerInvoer( $gebruiker ){
        $this->gebruiker = $gebruiker;
    }
    abstract public function geefWaardes();
}

//en dit zijn mogelijke modules die voldoen
class moduleA extends moduleBasis{
    public function geefWaardes{
        //code
    }
}
class moduleB extends moduleBasis{
    public function geefWaardes{
        //code die iets totaal anders doet, maar wel vergelijkbare resultaten geeft
    }
}

//deze dynamisch aanmaken, het gaat om het idee:
$modules = array( new moduleA, new moduleB );

//en er doorheenlopen. Je kunt zo heel gemakkelijk telkens dezelfde functienaam aanroepen op verschillende modules
foreach( $modules as $moduleObject ){
    if( $moduleObject instanceof moduleBasis ){
        schrijfNaarFactuur( $moduleObject->geefWaardes() );
    }
}
?>


Het gaat om het idee, de uitwerking kan iets netter :)

offtopic:
eval() is nog niets, PHP wil in versie 6 goto introduceren. Daar kan je pas prachtige spagetti mee maken :D Nu kan eval af en toe wel handig zijn, maar mooi is het nooit. Hetzelfde zal wel voor goto gelden.

[ Voor 8% gewijzigd door doeternietoe op 06-01-2009 00:18 ]

Pagina: 1