subscribe

PHP try..catch syntax weirdness

I just noticed today that the try..catch block requires the use of curly braces, e.g.:

<?php

  try {

    throw new Exception('unox');

  } catch (Exception $e) echo $e->getMessage();

?>

..won't work. I wonder why..

Web mentions

Comments

  • Stefan

    Stefan •

    I don't know if this was a serious question or not, but I have the weird feeling that you can't mix the short (no { }) notation with the usage of brackets earlier in the same statement.
  • Mathieu Kooiman

    Mathieu Kooiman •

    Well, dealing with an exception in a decent manner probably requires more than one line in most cases :).

  • Sebastian

    Sebastian •

    Inconsitent due to parser inabilities.

    Reminds me of $obj->foo()->bar() not working in PHP 4.x
  • Hans

    Hans •

    Yes, if you start looking for consistency in the PHP parser, I think you'll be disappointed :)
  • Daniel Luz

    Daniel Luz •

    I believe the same applies to C++ and Java. Not sure about their intentions, but maybe it was to enforce clean and explicit code (something that should be very important when dealing with exceptions).

    Stefan, you can mix both notations on if-else blocks, so that's not really the case.
  • Evert

    Evert •

    I found out its even the case with javascript.. strange
  • Manjunath

    Manjunath •

    Very use full try catch example thankyou.
  • eddie

    eddie •

    you must use crurly brackets for the catch as well. the following works fine for me;
    [code]
    // Load the XML source
    $xml = new DOMDocument;
    try{
    global $url,$xml;
    $xml->load($url);
    }catch (Exception $e){
    echo 'failed';
    $xml->load('empty.xml');
    }
    [/code]
  • Jesse Couch Vancouver

    Jesse Couch Vancouver •

    no big deal, just use braces always.
  • Actionscript 3.0

    Actionscript 3.0 •

    .
  • Snowcore

    Snowcore •

    Yes, It's really powerful thing in PHP5 - i like it very much!
  • Jamie

    Jamie •

    I found the same thing, I think its because the try catch functionality is only supported from PHP 5 onwards, I happened to be using PHP 4.4.9

  • Evert

    Evert •

    Yea, try..catch on PHP4 will definitely not work.. My note was on some of the little inconsistencies that are in the PHP engine..
  • soumya

    soumya •

    why we use try catch block and if it is what is the sntax
  • asd

    asd •


    try {

    throw new Exception('unox');

    } catch (Exception $e){
    echo $e->getMessage();
    }
  • tarek

    tarek •

    You can't use try without the brackets like if or for
    try{
    throw new Exception('unox');
    }catch (Exception $e){
    echo $e->getMessage();
    }
    ?>
    is working fine like this
  • tnt2br

    tnt2br •

    You can use the try / catch block when you write one or many exceptions in you Class, for exemple:


    Class Test
    {
    public function hello($name)
    {
    if (is_string($name)){
    echo "Olá $name.
    \n";
    } else {
    throw new Exception ("Error: the variable isnt a string.
    \n");
    }
    }
    }


    try{
    $object = new Test();

    // here will echo "Olá Felipe."
    $object->hello("Felipe");

    // here you will have one error.
    // then the catch will send the error message.
    // because the method expect receive a string not an interger
    $object->hello(15);

    }catch (Exception $e){
    echo $e->getMessage() . "\n
    ";
    }
    ?>

    (sorry about my poor english)
  • Evert

    Evert •

    Oh my.. still comments rolling in on this one.

    Let my try to repeat my point..

    I think it's weird, that try..catch requires brackets, while other control statements such as while, for, foreach & if do not require brackets.

    I have no problem figuring out how exceptions work, but thank you..