Permalänk
Medlem

Mudulär kod i PHP?

Hallå!
Jag skulle behöva lite hjälp med min kod, eller snarare idéer.
Det är så att jag vill bygga upp min kod på så sätt att det är en huvudfil som körs konstant, men som sedan på något sätt laddar om mindre filer, som moduler på sätt och vis. Men jag har inga bra lösningar på detta...
Det jag vill göra i princip är att "includera" en fil igen, och sedan ladda om klassen i den till den gamla variabeln

<?php // Vid uppstart include("enfil.php"); $enfil = new enfil(); // Vid ett senare tillfälle include("enfil.php"); // IGEN, för att ladda om ändringar i koden unden körning. $enfil = new enfil(); // Skriv över det gamla objektet ?>

Ni förstår vad jag menar?
Men om jag includerar samma fil två gånger så finns koden där två gånger, och ger då självklart errors.

Det måste finnas en bra lösning? Den måste självklart inte likna det sätt jag förklarade ovan.

Några idéer?
// Richard

EDIT: Jag kom på idén att köra modulerna separat.
Dvs att huvudfilen exekverar modulfilen, där de två filerna sedan arbetar med varandra genom telnet, men detta tycker jag verkar för invecklat, och letar fortfarande efter bättre förslag

Permalänk

Du har altså tänk ändra i modulerna medans sidans kod exekveras? Varför, eller är det script som tar _vädligt_ lång tid för att exekveras? Förstår i alla fall inte varför du vill göra såhär.

En fullösning jag kom på medans jag skrev var att du kan ju läsa in filen "enfil.php" spara den som temp8384636d311ddfd4g5.php (ett namn som slupats fram med t.ex. uniqid()) och sedan köra include, sen får du givetvis ta bort filen efteråt. Allt detta kan man ju väva in i en funktion så kör du my_include('enfil.php'); varje gång.

Edit: För jag har tråkigt idag (ska egentligen plugga):

function myInclude($file) { $content = file_get_contents($file); $newName = sha1(uniqid(rand(), true)); file_put_contents($newName, $content); include $newName; unlink($newName); }

Visa signatur

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av swejihad
Du har altså tänk ändra i modulerna medans sidans kod exekveras? Varför, eller är det script som tar _vädligt_ lång tid för att exekveras? Förstår i alla fall inte varför du vill göra såhär.

En fullösning jag kom på medans jag skrev var att du kan ju läsa in filen "enfil.php" spara den som temp8384636d311ddfd4g5.php (ett namn som slupats fram med t.ex. uniqid()) och sedan köra include, sen får du givetvis ta bort filen efteråt. Allt detta kan man ju väva in i en funktion så kör du my_include('enfil.php'); varje gång.

Edit: För jag har tråkigt idag (ska egentligen plugga):

function myInclude($file) { $content = file_get_contents($file); $newName = sha1(uniqid(rand(), true)); file_put_contents($newName, $content); include $newName; unlink($newName); }

Anledningen till varför jag vill göra såhär är för jag kodar en IRC-bot, och vill kunna ändra i koden utan att starta om den och återansluta.
Jag vet inte riktigt hur ditt sätt kommer att fungera, eftersom koden från den tidigare inkluderade filen kanske ligger kvar i koden. Men jag ska prova

Permalänk
Medlem

Ett alternativ är att använda eval();
Läs in scriptfilen(som ska vara utan "<?php ?>") till en variabel, sedan är det bara att köra eval på variabeln när du vill att innehållet ska köras.
För att upptäcka när filen ändrats, och då läsa in den på nytt, kan tex filemtime användas. (Jämför modifikationstiden med modifikationstiden vid förra inläsningen)
Gjorde också en ircbot i php för några år sedan, men den lyssnade efter ett kommando på irc som triggade återinläsningen.

Visa signatur

Oh. Uhm, look... if we built this large wooden badger...

Permalänk
Medlem

Om jag inte minns fel så är väl eval väldigt segt? Jag menar om jag ska exekvera 200 rader kod, tex...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Unreality_88
Om jag inte minns fel så är väl eval väldigt segt? Jag menar om jag ska exekvera 200 rader kod, tex...

Borde vara snabbare att köra eval() på en variabel än att includa en fil från disk.

Visa signatur

Oh. Uhm, look... if we built this large wooden badger...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av toffe_
Borde vara snabbare att köra eval() på en variabel än att includa en fil från disk.

Det var bara något jag minns från mitt undermedvetna, typ har för mig att det var segt bara, men jag har kommit på en ny ide, kanske inte så lysande, men ändå genomförbar.

Jag har en tabell i min databas för temporär data, där modulen och huvudfilen kommunicerar med varandra genom en vanlig socket anslutning som säger att "NU ÄR JAG FÄRDIG, TITTA I DATABASEN EFTER DESSA RAD ID..."
så kollar huvudfilen i databasen efter de rader med dessa ID osv..
men jag har andra problem nu, som jag editerar in här snart.
EDIT:

Citat:

IDG Webbstudio
Klassarv

Php klarar att hantera arv mellan klasser. Det innebär bland annat att du kan skapa subklasser utan egna konstruktorer. När du skapar ett instansobjekt av en subklass utan konstruktor kommer subklassen att använda konstruktorn som finns i den överordnade superklassen. Förutsatt att du har kopplat subklassen till den överordnade superklassen.

class SubKlass extends SuperKlass {}

Jag vill skapa ett "träd" med klasser, där alla "subklasser" kommer åt variablarna ifrån "huvudklassen", men det skiter sig när jag ska ha mer än en subklass, någon som vet varför?