php "filosofie"

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Elias

elias

17/04/2008 16:21:00
Quote Anchor link
ik zat met een vraagje qua optimalistatie van code.

het zit namelijk zo. ik werk met een frontcontroller die dus al de paginas regelt en daarin include ik al mijn klasses en externe functies.

nu is mijn vraag wanneer ik deze beter include. pas wanneer ik ze nodig heb of bovenaan de frontcontroller?

ik doe mijn stage in programmeren van php en deze zou er dus zo "optimaal" mogelijk moeten uitzien :p
 
PHP hulp

PHP hulp

27/12/2024 13:15:58
 
Jurgen assaasas

Jurgen assaasas

17/04/2008 16:41:00
Quote Anchor link
het handigste lijkt mij als je het nodig hebt, waarom een bestand parsen als je het niet nodig hebt.
 
Jelmer -

Jelmer -

17/04/2008 16:56:00
Quote Anchor link
Pas dingen inladen wanneer je ze nodig hebt is vooral in een taal als PHP handig. Vaak gaat er 30 tot 40 procent van de tijd die de server nodig heeft je request af te handelen zitten in het laden & parsen van PHP bestanden. Wanneer je die dan kan terugbrengen naar wat minder, is dat ietsjes sneller.

Je kan ook een opcache (zoals APC, Zend Optimizer, Xcache e.a.) zodat hij de gecompileerde code opslaat. Dan maakt het niet zoveel meer uit hoeveel bestanden je moet inladen.

Pak er ook eens een profiler bij (in Zend zit er eentje, en volgens mij kan het ook met xdebug) dan kan je zien waar het meeste tijd aan wordt besteed.
 
Elias

elias

17/04/2008 18:10:00
Quote Anchor link
ok, ik dacht wel zoiets.

@ jelmer, ik zal morgen eens kijken voor de programmas die je aanraad

verder had ik nog een vraag met wat code erbij:

dit stuk code zit in een apart php file.
en heb er ook zo nog andere voor andere databaseacties.

is het dan ok als ik telkens na dit uit te voeren mijn connectie sluit?
of is dit te tijdrovend?
en wat in geval er te veel connecties blijven opstaan?
en wanneer gebeurt dit dat er teveel connecties blijven open staan?

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
<?php
function selectCat(){
    //  connectie ophalen
    global $mdb2;
    
    //  sql statement
    $taalID = $_SESSION['taalID'];
    $resCat = $mdb2->query("SELECT * FROM tbl_categorie_beschrijving WHERE taalID='$taalID'");
        //  connectie sluiten
    $mdb2->disconnect();  
    
    //  controleren of er geen fout in resulaat is
    if (PEAR::isError($resCat)) {
        die($resCat->getMessage());
    }
else{
        return $resCat;
    }
}

?>
 
Frank -

Frank -

17/04/2008 18:15:00
Quote Anchor link
Het openen en sluiten van een connectie zou ik niet in een functie doen. Wellicht heb je voor 1 pagina 10 functies nodig, dan ga je 10x een connectie openen en weer sluiten. Vooral het openen van een connectie kost veel tijd, dat wil je dus maar 1x doen. Althans, 1x voor 1 database-user. Heb je bv. een sessionhandler die ook z'n ding doet in de database, dan open je daar een andere connectie voor. Maar ook die hou je openen totdat je script klaar is.

PHP sluit z'n connecties automatisch, dat is dus niet iets om je druk over te maken. Het is overigens wel netjes om de boel na afloop te sluiten, ik doe het altijd wel.
 
Elias

elias

17/04/2008 19:18:00
Quote Anchor link
ok pgFrank.

maar wanneer is "na afloop"? wanneer weet je dat het niet meer nodig is?

ook nog een vraagje over mijn code van hierboven. bij het if statement return ik maar in één mogelijkheid. is dat ok?
Gewijzigd op 01/01/1970 01:00:00 door elias
 
Frank -

Frank -

17/04/2008 19:24:00
Quote Anchor link
Er komt een moment dat m'n script klaar is, dan gooi ik de output richting browser en gooi m'n objecten weg. Daar zitten ook de db-connecties bij.

En mocht ik het een keer vergeten, PHP ruimt zelf de rotzooi ook wel op.
 
Jelmer -

Jelmer -

17/04/2008 19:29:00
Quote Anchor link
Die die() is niet ideaal, omdat je op die manier niet de bezoeker van je website een mooie foutmelding en alternatief kan aanbieden, maar opscheept met een rauwe foutmelding uit de database. Daarnaast kan het zijn dat al de helft van de pagina geechood is, en de bezoeker dus een halve website heeft.

Try-catch statements gebruiken, of bijvoorbeeld 'false' of 'null' teruggeven en bij de aanroep van de functie controleren of het niet null/false is, is een wat nettere oplossing. Try-catch is wel idealer.
 
Elias

elias

17/04/2008 20:36:00
Quote Anchor link
@pgFrank: dat ik daar natuurlijk zelf niet was opgekomen, aan het einde van de pagina :)

@Jelmer: als ik dan catch op een error. wat stuur ik dan terug? of hoe wordt er dan verder gezorgd dat alles er goed uitziet?
 
Jurgen assaasas

Jurgen assaasas

17/04/2008 20:45:00
Quote Anchor link
Je kunt een error genereren door throw te gebruiken.

voorbeeld:

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
<?php

try
{
    if(!$var = 'Dit is een variable')
    {

        throw new Exception('Dit is een foutmelding');
    }
}

catch(Exception $e)
{

    echo $e->getMessage();
}



?>


In dit voorbeeld zal er natuurlijk altijd TRUE uitkomen maar dit is heel goed toepasbaar bij bijv. database connecties, bestanden open etc.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Elias

elias

17/04/2008 21:13:00
Quote Anchor link
alvast bedankt, ik ga al deze dingen later in mijn program zetten. ik ga eerst even zien dat alles werkt en daarna ga ik de try catch aanpakken.

heb ondertusse de includes al verplaatst en de connectie sluitingen al weggesmete

waneer doe ik trouwens include_once en wanneer require_once?
Gewijzigd op 01/01/1970 01:00:00 door elias
 
Joren de Wit

Joren de Wit

17/04/2008 22:37:00
Quote Anchor link
Quote:
waneer doe ik trouwens include_once en wanneer require_once?
Als een include mislukt zal hier een warning op gegeven worden maar het script zal wel verder doorlopen. Bij require zal een fatal error gegenereerd worden en het script zal dus ook niet verder uitgevoerd worden. Dat zijn dus de criteria waarop je kiest tussen include en require.

Offtopic:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(!$var = 'Dit is een variable')
?>

Dit if-statement zal nooit uitgevoerd worden aangezien de voorwaarde nooit TRUE op zal leveren. Je controleert hier namelijk of het toekennen van een waarde aan de variabele $var gelukt is en niet of $var die waarde heeft. Dat zou er natuurlijk zo uit zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($var != 'Dit is een variable')
?>
 
Jurgen assaasas

Jurgen assaasas

17/04/2008 23:11:00
Quote Anchor link
Blanche schreef op 17.04.2008 22:37:
Quote:
waneer doe ik trouwens include_once en wanneer require_once?
Als een include mislukt zal hier een warning op gegeven worden maar het script zal wel verder doorlopen. Bij require zal een fatal error gegenereerd worden en het script zal dus ook niet verder uitgevoerd worden. Dat zijn dus de criteria waarop je kiest tussen include en require.

Offtopic:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(!$var = 'Dit is een variable')
?>

Dit if-statement zal nooit uitgevoerd worden aangezien de voorwaarde nooit TRUE op zal leveren. Je controleert hier namelijk of het toekennen van een waarde aan de variabele $var gelukt is en niet of $var die waarde heeft. Dat zou er natuurlijk zo uit zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($var != 'Dit is een variable')
?>


Dat snap ik, maar stel dat het zou mislukken om die variable aan te maken. Wat natuurlijk nooit gebeurd.
 
Joren de Wit

Joren de Wit

17/04/2008 23:12:00
Quote Anchor link
Quote:
Wat natuurlijk nooit gebeurd.
Beetje nutteloos om daarop te controleren dan he ;-)
 
Jurgen assaasas

Jurgen assaasas

17/04/2008 23:47:00
Quote Anchor link
Blanche schreef op 17.04.2008 23:12:
Quote:
Wat natuurlijk nooit gebeurd.
Beetje nutteloos om daarop te controleren dan he ;-)



Ok, dat is ook zo, stel je voor dat daar if(!$var) staat waarbij $var een db instantie bevat :P.
 
Lode

Lode

17/04/2008 23:54:00
Quote Anchor link
je kan 'm wel forceren naar bool net als in C/C++

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if(!!$var = 'test'){
    echo 'true<br/>'.PHP_EOL;
}

if(!!!$var = ''){
    echo 'false<br/>'.PHP_EOL;
}

?>
 
Jelmer -

Jelmer -

18/04/2008 08:07:00
Quote Anchor link
Wel verdorie! Nu is mijn hele bericht weg :/

Wat ik zei:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo (!$a = '') ? 'true' : 'false';
?>

geeft true.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Elias

elias

18/04/2008 10:11:00
Quote Anchor link
:* hier stond vroeger een javascript vraag, maar deze werd "op vraag" verwijderd uit deze topic */
Gewijzigd op 01/01/1970 01:00:00 door elias
 
Jelmer -

Jelmer -

18/04/2008 10:14:00
Quote Anchor link
Wat heb je al geprobeerd, en welk script draait het om? Krijg je een foutmelding?

Overigens is het handiger hier even een nieuw topic voor te maken. Zo kunnen mensen later de antwoorden makkelijker terugvinden
 
Jelmer -

Jelmer -

18/04/2008 10:14:00
Quote Anchor link
* grom *
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Elias

elias

18/04/2008 10:39:00
Quote Anchor link
ok :)

ik zal mijn vraag even editen en wegdoen, zodat er hier niet verder op gegaan kan worden.

dus: 'edit: elias verwijderd javascript vraag'
 



Overzicht Reageren

 
 

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.