Functie try catch voor andere functies

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom Beuckelaere

Tom Beuckelaere

11/02/2007 15:30:00
Quote Anchor link
Hallo,

Aangezien ik al heel goed ben in oo programmeren in C#, ben ik dit nu ook aan het leren in php.

ik heb volgende testcode en heb daar een functie gemaakt met een try catch.
Nu ik wil niet bij alles wat ik doe, try catch maken enz. Dus dat de try catch gebeurt doormiddel van een functie genaamd _tryFunctie.

Vb. ik gebruik de functie _printMessage($message) en wil die latene doorlopen door een try catch dus ik zou iets wilen dat het effect geeft als _tryFunction(_printMessage($message) ). Hoe kan ik dit het best aanpakken?


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
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

class customException extends Exception {}

class Printing
{
    public function _tryFunction($function)
    {

        try
        {
            $function;
        }

        catch(Exception $e)
        {

            echo $e;
        }
    }

    public function _printMessage($message)
    {

        echo $message;
    }

    public function _printError($error)
    {

        echo $error;
    }    
}


$a = new Printing();
$a -> _printMessage('message<br />');
$a -> _printError('<strong>error</strong>');

exit();

?>
Gewijzigd op 01/01/1970 01:00:00 door Tom Beuckelaere
 
PHP hulp

PHP hulp

25/04/2024 14:41:23
 
Martijn B

Martijn B

11/02/2007 15:38:00
Quote Anchor link
Zo iets?:
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
22
<?php
    public function _tryFunction( $sFuncNaam, $sFuncParams )
    {

        try
        {
            switch( $sFuncNaam )
            {
               case
'printMessage':
                  ...

                  break;
               case
'printError':
                  ...

                  break;
            }

        }

        catch(Exception $e)
        {

            echo $e;
        }
    }

?>
 
Tom Beuckelaere

Tom Beuckelaere

11/02/2007 15:41:00
Quote Anchor link
Dan wordt het weer een beetje omslachtig om bv 100 switches te maken, k zou gewoon tussen die _tryFunction() de naam van mijn te "tryen" functie moeten kunnen plaatsen.
 
Joren de Wit

Joren de Wit

11/02/2007 15:53:00
Quote Anchor link
Volgens mij is het mogelijk door gewoon () achter een variabele te plakken. Onderstaande scriptje werkt in ieder geval:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function test()
{

    echo 'Het werkt';
}

function
voerUit($functie)
{

    $functie();
}


voerUit('test');
?>
 
Bo az

Bo az

11/02/2007 15:56:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

try{
    $a = new Printing();
    $a -> _printMessage('message<br />');
    $a -> _printError('<strong>error</strong>');
}
catch(Exception $e){
    echo $e->getMessage();
}


?>


Meestal zit je try catch op dat niveau, ik begrijp alleen niet goed of je nu andere bedoelingen hebt?
 
Tom Beuckelaere

Tom Beuckelaere

11/02/2007 16:00:00
Quote Anchor link
Heb het geprobeerd op die manier en krijg dan volgende error, maar krijg wel output:Fatal error: Function name must be a string in E:\Mijn Documenten\web_request_design_op_maat\usbwebserver_v6\Webserver\Root\functions.php on line 23

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
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

class customException extends Exception {}

class Printing
{    
    public function _printMessage($message)
    {

        echo $message;
    }

    public function _printError($error)
    {

        echo $error;
    }

    public function _tryFunction($function)
    {

        try
        {
            $function();
        }

        catch(Exception $e)
        {

            echo $e;
        }
    }    
}


$a = new Printing();
$a -> _tryFunction($a->_printMessage('message<br />'));
$a -> _printError('<strong>error</strong>');

exit();

?>
Gewijzigd op 01/01/1970 01:00:00 door Tom Beuckelaere
 
Tom Beuckelaere

Tom Beuckelaere

11/02/2007 16:03:00
Quote Anchor link
Boaz schreef op 11.02.2007 15:56:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

try{
    $a = new Printing();
    $a -> _printMessage('message<br />');
    $a -> _printError('<strong>error</strong>');
}
catch(Exception $e){
    echo $e->getMessage();
}


?>


Meestal zit je try catch op dat niveau, ik begrijp alleen niet goed of je nu andere bedoelingen hebt?


Wel niet alle functies zal ik steeds nodig hebben dus vandaar dat niet alles steeds in try catch zal staan daar onderaan. Kheb voorbeeld alleen de functie _printMessage nodig in een bepaald bestand dus dan roep ik _printMessage aan die door die door de _tryFunctie () gaat. Uiteindelijk komt dit alles terecht in een functions.php
 
Bo az

Bo az

11/02/2007 16:09:00
Quote Anchor link
Dan moet je het try / catch statement dus op een nog hoger (zo je wil lager) niveau zetten, dan pakt ie ook alle exceptions van onderliggende code / files etc. mee.
 
Tom Beuckelaere

Tom Beuckelaere

11/02/2007 16:18:00
Quote Anchor link
maw op deze manier bedoelt u?

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
22
23
24
25
26
27
28
29
<?php

try
{
    class Printing
    {    
        public function _printMessage($message)
        {

            echo $message;
        }

        public function _printError($error)
        {

            echo $error;
        }        
    }


    $a = new Printing();
    $a -> _printMessage('message<br />');
    $a -> _printError('<strong>error</strong>');
}

catch(Exception $e)
{

    echo $e;
    exit();
}


exit();

?>
Gewijzigd op 01/01/1970 01:00:00 door Tom Beuckelaere
 
Bo az

Bo az

11/02/2007 16:27:00
Quote Anchor link
Nee,

stel de volgende situatie:
Je hebt een nieuws systeem, in
clsPageBuilder wordt de pagina gebouwd deze maakt gebruik van :
clsDatabase en clsNogIest
Maar clsDatabase en clsNogIets worden niet direct aangeroepen alleen via clsPageBuilder

Dan is het genoeg op 1 try / catch te hebben:

try{
$oPage = new clsPageBuilder();
$oPage->eenActie();
}catch(Exception $e){
echo $e->getMessage();
}
?>

Omdat alle aanroepen binnen clsPageBuilder worden gedaan worden hier ook alle exceptions van clsDatabase en clsNogIets opgevangen.

Dit is dus zeg maar 'het hoogste niveau' je hebt dus genoeg aan één try / catch en hoeft niet voor 1 classe apart te testen of het wel lukt.

Geen idee of je er wat aan hebt / of je dit bedoelde maar zo zou ik het doen.
 
Tom Beuckelaere

Tom Beuckelaere

11/02/2007 16:35:00
Quote Anchor link
Ja, ksnap het, merci voor de hulp
 



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.