meerdere variabelen uit 1 functie halen (noob vraag)
Pagina: « vorige 1 2 3 4 5 6 volgende »
Ikzelf heb ook een paar testdomeintjes aangeschaft, om een één-op-één kopie van mijn site te kunnen draaien.
- Ariën - op 15/03/2020 16:52:55:
Ikzelf heb ook een paar testdomeintjes aangeschaft, om een één-op-één kopie van mijn site te kunnen draaien.
Ik gebruik gewoon subdomeinen voor elk project dus heb ik aan één domeinnaam genoeg.
Database alleen al is meer dan 500mb
Er zitten heel veel beveiligingen in dit systeem vanwege boekhouding en AVG wet
Ik moet dus constant nieuwe info krijgen
Zeker met het deel dat ik nu dus herschrijf
Ik wil best indien je interesse hebt een keer ergens langskomen dan kan ik het je laten
Zien
Dan snap je wat ik bedoel en wat ik nodig hebt
Over wat voor beveiligingen hebben we het dan wel? En wat is het probleem met 500 mb? Dat dump je in een minuutje over. Een database in een testomgeving zal tevens behoorlijk kleiner zijn omdat deze praktisch bijna niet actief gebruikt wordt.
Ik moet het altijd deeltje voor deeltje doen.
Ik heb gelukkig een hele goede acronis backup eraan gelinkt die dit automatisch doet
het gehele systeem checkt naar gegevens en naar datums, ontbreekt er een datum of een invoer dan wordt het gehele systeem autmatisch on-hold gezet tot ik het gefixt heb meestal fixed het systeem indien mogelijk zichzelf
en indien ik zelf dingen aanpas om dit tegen te gaan op een test omgeving dan kloppen de bedragen enz niet meer
(ja ik heb zoveel mogelijk zo gemaakt dat het script in meeste gevallen zichzelf kan herstellen)
ik kan dus niet een deeltje van mijn systeem appart trekken om er dan mee te werken in een test omgeving
ik moet dus in feiten snachts een gehele backup maken en overzetten naar een 2de domein
20+ paginas die hardcoded gelinkt staan aan de bestaande site aanpassen naar de nieuwe domein
minimaal 1 extra domein erbij voor een enventuele testklant
dit moet in sql toegevoegd worden
(allemaal veiligheids redenen)
en er moet iets geschreven worden die automatish de nieuwe invoeren die zijn gedaan in bestaande systeem doorstuurd naar de sql van de nieuwe omgeving
aangezien ik meestal simpele aanpassingen doe heeft dat in bijna alle gevallen geen zin of duurt te lang
enige goede manier om dit te doen in theorie
is een geheel nieuw systeem maken vanaf grond
deze helemaal tot in de puntjes uitwerken, hierbij gebruik maken van de nieuwste technieken
(die ik dus niet beheers )
dan vervolgens een script maken die de gehele oude database omzet en importeert naar nieuwe omgeving
dit moet hierna dus minimaal een week worden getest op heel veel eventuele errors en mogelijkheden
en als alles dan met de volle 100% perfect werkt omzetten naar systeem, dit moet gegarandeerd voor 8 uur perfect werken
klant mag hier niet veel tot niets van merken
dit is een dus bijna onmogelijke opgaven
om deze reden doe ik het dus ook stapje voor stapje op een live omgeving
hierdoor kan ik gebruik maken van bestaande gegevens zonder hiermee een fout te maken want de pagina die ik maak is afgeschermd van van klanten
hun zullen de fouten die ik maak dus niet zien
ps: mijn systeem gebruikt dynamische domeinnamen en subdomeinen, ze hebben dus geen fisieke map alle domeinene of subdomeinen gebruiken de zelfde map en files
alleen krijgen klanten wel een eigen style map zodat ik per klant een eigen design en mogelijkheden kan toevoegen
maar volgens mij dwalen we helemaal af van het geen dat ik zoek, en dat is meer kennis krijgen met het gebruik van bv functies
ik zal in mijn noob manier even uitleggen wat ik wil
ik heb 20 verschilende hele grote SQL SELECT delen met een while erin
soms zelfs een while in een while
we noemen dit even voor het gemak "scriptjes"
de output van all deze apparte scriptjes worden op meer dan 20 paginas gebruikt
deze scriptjes heb ik vanwege domheid en niet logies nadenken op al die paginas appart geschreven
waarom.... omdat op 1 of andere manier het anders niet snel genoeg goed werkte
en moest het als nood dus knippen en plakken en een beetje tweaken zodat het wel goed was
elk van deze paginas heeft een eigen cache aanmaak script die alle outputs per dag per gebruiker in een cache file toevoegt
in deze cachefile worden meer dan 100 verschillende variabelen opgeslagen die dus zijn berekent via deze scriptjes
elke pagina check vooraf of er een cachefile is, zoja pakt hij cachefile
zoniet dan gaat het script rekenen, en maakt zelf deze variabelen aan, welke gelijk weer worden opgeslagen in een cache zodat het niet een 2dekeer hoeft
ik kan dus zonder problemen gehele cache legen want systeem repareert zichzelf
is het allemaal 1 groot zooitje .... JA
werkt het ... JA
echter nu ik een aantal dingen wil uitbreiden loop ik tegen bomen aan in mijn bos
reden, ik heb teveel verschillende plekken met verschillende scriptjes die eigelijk hetzelfde allemaal moeten doen
wat wil ik...
ik wil 1 script, functie of pagina of meerdere scripts, functies of paginas
die per gebruiker/dag gegevens opvraagt en daar een cache van maakt
dit script moet ook in een while of foreach gebruikt kunnen worden
per dag,maand,jaar, gebruiker enz enz
de gegevens moeten van alle while of foreach optelbaar zijn en berekenbaar (om deze reden dus 100 variabelen)
en in geval er niks is automatisch 0 terug geeft
de berekeningen moeten op de cent nauwkeurig kloppen
enz enz
Sylvester vader op 16/03/2020 01:08:43:
500 is ingepakt volgens mij, ik kan in iedergeval niet gewoon even een backup overzetten via bv phpmyadmin dan crashed de backup.
Ik moet het altijd deeltje voor deeltje doen.
Ik moet het altijd deeltje voor deeltje doen.
Zulks doe je dan via de CLI. PuTTY via SSH. En je hebt geen enkele (PHP-)limiet en het gaat veel sneller!!!
Quote:
en indien ik zelf dingen aanpas om dit tegen te gaan op een test omgeving dan kloppen de bedragen enz niet meer
(ja ik heb zoveel mogelijk zo gemaakt dat het script in meeste gevallen zichzelf kan herstellen)
ik kan dus niet een deeltje van mijn systeem appart trekken om er dan mee te werken in een test omgeving
(ja ik heb zoveel mogelijk zo gemaakt dat het script in meeste gevallen zichzelf kan herstellen)
ik kan dus niet een deeltje van mijn systeem appart trekken om er dan mee te werken in een test omgeving
Dan houd het het toch zo? Ik zou dan minimaal de namen even fictief maken, en eventueel wat records wissen voor een minimale werkende test-database.
Quote:
enige goede manier om dit te doen in theorie
is een geheel nieuw systeem maken vanaf grond
deze helemaal tot in de puntjes uitwerken, hierbij gebruik maken van de nieuwste technieken
(die ik dus niet beheers )
dan vervolgens een script maken die de gehele oude database omzet en importeert naar nieuwe omgeving
dit moet hierna dus minimaal een week worden getest op heel veel eventuele errors en mogelijkheden.
is een geheel nieuw systeem maken vanaf grond
deze helemaal tot in de puntjes uitwerken, hierbij gebruik maken van de nieuwste technieken
(die ik dus niet beheers )
dan vervolgens een script maken die de gehele oude database omzet en importeert naar nieuwe omgeving
dit moet hierna dus minimaal een week worden getest op heel veel eventuele errors en mogelijkheden.
Zorg dus voor een goed verdienmodel en dat je iemand in kan huren.
Quote:
en als alles dan met de volle 100% perfect werkt omzetten naar systeem, dit moet gegarandeerd voor 8 uur perfect werken
klant mag hier niet veel tot niets van merken
dit is een dus bijna onmogelijke opgaven
klant mag hier niet veel tot niets van merken
dit is een dus bijna onmogelijke opgaven
Kwestie van testen, en alle zeilen bijzetten.
Quote:
om deze reden doe ik het dus ook stapje voor stapje op een live omgeving
hierdoor kan ik gebruik maken van bestaande gegevens zonder hiermee een fout te maken want de pagina die ik maak is afgeschermd van van klanten
hun zullen de fouten die ik maak dus niet zien
hierdoor kan ik gebruik maken van bestaande gegevens zonder hiermee een fout te maken want de pagina die ik maak is afgeschermd van van klanten
hun zullen de fouten die ik maak dus niet zien
Dus is het een testomgeving? In Live hoor je NOOIT te ontwikkelen!!!!!
gegevens en deze hierna te gebruiken
en de gehele cache map heb ik voor deze test pagina tijderlijk aangepast
maar ik gebruik dus wel de live gegevens van mijn klanten om te testen
Na alles wat ik heb kunnen lezen lijkt het dus tijd voor een goed MVC-model, gebaseerd op een framework, denkende aan Symfony, Laravel of CakePHP, om maar wat op te noemen. Het heeft een leercurve, maar het gebruik ervan verdient zich zeker terug.
al moet ik toegeven dat veel van die scripts enz best goed eruit zien
ik heb in het verleden naar heel veel mogelijkheden gezocht maar kon nooit iets vinden dat bij mij paste
vaak kon net hetgene niet, dat ik zocht en moest ik evengoed dus zelf iets ernaast schrijven dat dan weer samenwerkte met het bestaande model
dus had ik jaren al besloten om geheel van grond zelf iets te maken, dit script is in 8 jaar tijd heel erg gegroeid
en heeft precies alles dat ik nodig heb
alleen is het meeste dus hardcoded erin gescript en is het 1 grote wirwar
maaaaaaaaar het werkt.!!!
daarnaast is het zo dat ik veel met persoonsgegevens bezig ben en uit ervaring merk ik dat bestaande dingen, het eerste is dat gehacked wordt of een poging tot.
Omdat online staat precies hoe het gehele model in elkaar zit en hoe het dus misschien gehacked kan worden
ik heb hier verder geen verstand van maar omdat ik er zelf dus geen controle op heb gebruik ik niks van andere
daarnaast heb ik geen tijd om mij volledig in zoiets te gaan verdiepen
Sylvester vader op 16/03/2020 12:58:05:
aaaaaaaa geen bestaande troep aub (sorry dat ik dat troep noem)
al moet ik toegeven dat veel van die scripts enz best goed eruit zien
al moet ik toegeven dat veel van die scripts enz best goed eruit zien
Dus je vindt liever het wiel opnieuw uit, terwijl grote sites zoals Tweakers, en hoogstwaarschijnlijk ook veel andere grote sites, ook een bestaand framework gebruiken? Je schiet naar mijn idee welk een beetje in de paniekstand, heb ik het idee. ;-)
Quote:
ik heb in het verleden naar heel veel mogelijkheden gezocht maar kon nooit iets vinden dat bij mij paste
vaak kon net hetgene niet, dat ik zocht en moest ik evengoed dus zelf iets ernaast schrijven dat dan weer samenwerkte met het bestaande model.
vaak kon net hetgene niet, dat ik zocht en moest ik evengoed dus zelf iets ernaast schrijven dat dan weer samenwerkte met het bestaande model.
Dat ga je niet snel vinden. Je kan ook je oude code in je framework gebruiken, een deze steeds verder optimaliseren.
Als voorbeeld: Tweakers is vrij 'open' over de implementatie van het Symfony Framework in hun codebase, en in hun iteratie-artikelen geven ze een kijkje in de keuken over hoe zij hun oude code overhevelen naar de MVC-structuur van Symfony. Lees vooral vanaf
https://tweakers.net/plan/600/development-round-up-iteratie-8.html een de daaropvolgende 'iteratie' artikelen.
Quote:
dus had ik jaren al besloten om geheel van grond zelf iets te maken, dit script is in 8 jaar tijd heel erg gegroeid
en heeft precies alles dat ik nodig heb
alleen is het meeste dus hardcoded erin gescript en is het 1 grote wirwar
maaaaaaaaar het werkt.!!!
en heeft precies alles dat ik nodig heb
alleen is het meeste dus hardcoded erin gescript en is het 1 grote wirwar
maaaaaaaaar het werkt.!!!
Maar onderhoud is nu vast zeer tijdrovend.
Quote:
daarnaast is het zo dat ik veel met persoonsgegevens bezig ben en uit ervaring merk ik dat bestaande dingen, het eerste is dat gehacked wordt of een poging tot.
Omdat online staat precies hoe het gehele model in elkaar zit en hoe het dus misschien gehacked kan worden.
ik heb hier verder geen verstand van maar omdat ik er zelf dus geen controle op heb gebruik ik niks van andere
daarnaast heb ik geen tijd om mij volledig in zoiets te gaan verdiepen
Omdat online staat precies hoe het gehele model in elkaar zit en hoe het dus misschien gehacked kan worden.
ik heb hier verder geen verstand van maar omdat ik er zelf dus geen controle op heb gebruik ik niks van andere
daarnaast heb ik geen tijd om mij volledig in zoiets te gaan verdiepen
Als je niemand vertrouwd, dan kom je niet ver. Zorg in ieder geval voor externe audits.
Gewijzigd op 16/03/2020 13:15:09 door - Ariën -
(indien ik iets beter zou zijn in nieuwe php scripting)
onderhoud valt mee omdat ik mijn script eigelijk altijd bouw dat het zichzelf opruimt en controleert
en ik maak het bijna altijd gelijk perfect
alleen de manier hoe ik iets maak is vaak via een omweg
dit ben ik dus langzaam stukje bij beetje aan het aanpassen
om deze reden nu dus een paar boekhoudpagina's updaten
reden hiervoor is dat een boekhouder heeft gevraagd of ik iets kon toevoegen in bestaand script
echter bleek hetgeen iets moeilijker te zijn dan ik in eerste instantie dacht en daarom wil ik het geheel herschrijven in verbeterde code zodat ik in toekomst niet weer tegen een boom in mijn bos loop :)
De voordelen daarvan worden op deze site uitgelegd:
https://www.dutchbridge.nl/nl/blog/voordelen-gebruik-php-framework
- in het verleden is de aardappelstempel iets te royaal gehanteerd, dit alles moet nu ontward worden
- het is nogal gevaarlijk om een soort van mix van een test- en een live-omgeving te hebben, idealiter houd je deze inderdaad strict gescheiden; voor je het weet / in een onbewaakt moment laat je testcode los of live data, en dan heb je de poppen echt aan het dansen (hoe zit het met backups? :p)
- de applicatie zelf leent zich niet echt (?) om makkelijk verplaatst te worden; op dit moment is deze dus een redelijke baksteen; als je deze op zijn minst opsplitst in een "test" en een "live" versie zou deze super makkelijker verplaatst en geupdate moeten kunnen worden; je zult dus moeten gaan nadenken over een soort van modulaire aanpak, waarbij de onderdelen die per omgeving verschillen (denk aan interne paden, databasegegevens, opbouw van interne applicatielinks en andere site-specifieke instellingen) uit een configuratie-bestand komen en/of dynamisch opgebouwd kunnen worden met deze configuratie; wat dus heel belangrijk is is dat je gaat nadenken over de algehele architectuur van jouw applicatie die je in staat stelt om makkelijk te ontwikkelen (en te updaten) zonder de live omgeving omver te gooien
Er valt iets voor te zeggen om iets te bouwen via beproefde methoden, en hier kennis van nemen kan je heel veel inzicht opleveren en is natuurlijk verstandig. Maar de aanpak van de bouw en de vorm van het eindproduct staat niet in steen gehouwen; het is geen noodzakelijke voorwaarde om de bouw van een applicatie precies/letterlijk volgens bepaalde methodieken te laten verlopen om tot een succesvol resultaat te komen. Natuurlijk moet je kennis hebben van de mogelijkheden en gevaren, maar een maatwerk applicatie kan prima een maatwerk aanpak volgen die precies "tailored to fit" is voor de doeleinden van genoemde applicatie.
Mijn eerste stap zou denk ik zijn: zorgen dat ik een aparte test-versie van mijn live applicatie heb die ook daadwerkelijk in een soort van "test modus" kan draaien, helemaal losgekoppeld van de live omgeving. De code hiervan... ik weet niet hoe moeilijk het is om deze los te weken van de live situatie, maar ik zou zeker een poging ondernemen.
Vervolgens gooi je de code van de testomgeving in een eenvoudig code versioning systeem (zou mogelijk niet eens voor GIT gaan) en als je dat gedaan hebt kun je in ieder geval wijzigingen om test en live uit elkaar te trekken volgen in een soort van historie en kun je dit stapsgewijs bewerkstelligen.
Tegelijkertijd opent dit de mogelijkheid om te "spelen" met de locale variant zonder enige implicaties voor de live omgeving (uiteraard op voorwaarde dat deze twee omgevingen op dat moment ook echt 100% gescheiden zijn :P). Op deze manier heb je voor jezelf al een enorme vrijheid gecreëerd om dingen uit te proberen, want op dit moment is dit systeem waarschijnlijk een blok aan je been.
En daarlangs zou je dus een ander (geversioned) systeempje op kunnen gaan zetten waarbij je gaat nadenken over paginaopbouw, algehele systeemstructuur etc, en/of je zou eens een uitstapje naar de database kunnen nemen en kijken hoe e.e.a. handiger/efficiënter opgeslagen kan worden en hoe je dit eventueel van A naar B migreert.
Dit alles dus naar aanleiding van de opzet van een testomgeving die niet (langer) afhankelijk is van jouw live applicatie.
Idealiter wil je ook vanuit de live omgeving de live database terug kunnen halen naar de testomgeving zodat je echt relevant testmateriaal hebt waarmee je kunt experimenteren. En als deze test database dan een keer vernaggeld is: geen probleem, je haalt gewoon de live database weer terug alsof je op een RESET-knop drukt. Hiermee heb je de perfecte zandbak waarin je helemaal los kunt gaan.
maar even om terug te komen bij mijn eerste vraag...
zou dit kunnen, of zoiets ...???
Code (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
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
function berekening_dranken($in1,$in2,$in3){
$uit0 = ;
$uit1 = ;
$uit2 = ;
$uit3 = ;
$uit4 = ;
$uit5 = ;
$uit6 = ;
$uit7 = ;
$uit8 = ;
$uit9 = ;
return [$uit0,$uit1,$uit2,$uit3,$uit4,$uit5,$uit6,$uit7,$uit8,$uit9];
}
$dranken = berekening_dranken(1,2,3);
echo ''.$dranken[uit0].'<br>';
echo ''.$dranken[uit1].'<br>';
echo ''.$dranken[uit2].'<br>';
echo ''.$dranken[uit3].'<br>';
echo ''.$dranken[uit4].'<br>';
echo ''.$dranken[uit5].'<br>';
echo ''.$dranken[uit6].'<br>';
echo ''.$dranken[uit7].'<br>';
echo ''.$dranken[uit8].'<br>';
echo ''.$dranken[uit9].'<br>';
$uit0 = ;
$uit1 = ;
$uit2 = ;
$uit3 = ;
$uit4 = ;
$uit5 = ;
$uit6 = ;
$uit7 = ;
$uit8 = ;
$uit9 = ;
return [$uit0,$uit1,$uit2,$uit3,$uit4,$uit5,$uit6,$uit7,$uit8,$uit9];
}
$dranken = berekening_dranken(1,2,3);
echo ''.$dranken[uit0].'<br>';
echo ''.$dranken[uit1].'<br>';
echo ''.$dranken[uit2].'<br>';
echo ''.$dranken[uit3].'<br>';
echo ''.$dranken[uit4].'<br>';
echo ''.$dranken[uit5].'<br>';
echo ''.$dranken[uit6].'<br>';
echo ''.$dranken[uit7].'<br>';
echo ''.$dranken[uit8].'<br>';
echo ''.$dranken[uit9].'<br>';
in de functie komt dan dus een sql select met allerlij berekeningen.
je doet niks met $in1, $in2 en $in3?
Het zou een stuk handiger werken als je de variabelen en indexen zinvolle namen geeft ipv 1,2,3 etc.
Ik denk dat TS het abstract bedoeld. Het antwoord is ja dit kan. Maar hou functies liefst kort. Besef ook dat een functie ook een andere functie kan aanroepen die dan een klein stukje van de werkzaamheden voor zijn rekening neemt. Je mag vele verschillende functies aanmaken maar je moet in één zin kunnen uitleggen wat de taak is van een functie. Deze taak moet eenduidig zijn.
Nee dat is alleen een invoer waarmee ik gegevens ophaal die ik dus in die functie nodig heb
Het script dat ik gaf was een voorbeeld
Uiteraard komen daar namen in
Ik kan functie kleiner maken maar dan moet ik bv 10 kleine functies maken
Die bij elkaar dus veel groter zullen zijn dan die ene functie
Want elke functies zou dan een select krijgen met een while
Enz enz
Dus wat is wijsheid...
Ik denk 1 goede functie die het meeste berekent
Tuurlijk ga ik proberen het deels te splitsen
Zodat alles lekker snel verloopt
Maar doel van deze functie moet zijn dat ik persoonlijk makkelijk dingen kan aanpassen zonder problemen
En niet dat ik eerst een half bos moet kappen
Om dan uiteindelijk de goede boom te vinden
En dan daarna weer het bos moet terug planten
Lol
Ik snap eerlijk gezegd de obsessie om alles in één functie te vangen cq proppen niet. Een functie is (of zou) een generiek ding (moeten zijn) die je vaker hergebruikt. Een functie zou één enkele of een aantal simpele taken voor zijn rekening moeten nemen, maar niet alles moeten doen.
Op het moment dat je een functie in een pagina in zijn totaliteit maar één keer aanroept dan heeft zo'n functie niet zoveel bestaansrecht... tenzij je functies gebruikt als middel om code te groeperen. Maar daarvoor zijn methoden of classes of wellicht complete PHP-bestanden (desnoods zonder OOP) een beter middel om hetzelfde doel te bereiken.
Dit haakt ook weer terug op mijn eerdere opmerking over het structureren van je code. Ik kan op dit moment niet goed beoordelen of functies in deze vorm en opzet de beste manier zijn om jouw doel te bereiken, maar gezien je alles tegelijkertijd door de (één) functie wilt laten regelen is een voorzichtige schatting dat dit niet, of sterker nog, verre van, optimaal is.
Geef ons een concreet voorbeeld van wat je uiteindelijk met behulp van deze functie(s) wilt kunnen doen en hoe deze interactie met elkaar hebben. Dan is het voor ons veel makkelijker om te bepalen of dit een gezond gebruik van deze constructie is. Functies zijn bij lange na niet een soort van heilige graal die alles oplossen... vooral niet als ze zijn toegespitst op een zeer
Gewijzigd op 16/03/2020 23:55:14 door Thomas van den Heuvel
Je haalt nu de woede op je hals van een hele grote groep ontwikkelaars die veel meer verstand van zaken hebben dan jij. Dus pas een beetje op wat je zegt.
[waarheid]Was je applicatie in Symfony of Laravel geschreven dan zat je nu niet in de problemen[/waarheid]