[PHP] return in catch blok genegeerd?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
    final protected function _insert($fieldVals2SkipQuoting = array())
    {
        if ($this instanceof DataObjectAutoGenerateData) {
            $this->generateData();
        }

        try{
            $this->validateData();
        } catch (BCMSDataException $e) {
            return false;
        }
[...]


In bovenstaand gedeelte wordt onder de functie $this->validateData(), de data van mijn object gevalideerd. Wanneer de validatie faalt, worden er exceptions gegooid. Hier onder een stukje van die functie

PHP:
1
2
3
4
        if (empty($this->name)) {
            MsgHandler::addMsg( new Msg(Msg::Error, 'Fout in paginanaam' ,'waarde mag niet leeg zijn.') );
            throw new BCMSDataException('no pagename defined');
        }


Wanneer ik nu mijn object submit, wordt de functie validateData() uitgevoerd en exceptions worden gegooid, en gevangen (ik krijg immers mijn foutmelding via $e->getMessage()). De return false wordt echter genegeerd en de code onder de return wordt gewoon uitgevoerd. Wanneer ik een exit in het catch blok plaats wordt deze gewoon uitgevoerd. Waarom returnt het catch blok niet uit de functie?

Acties:
  • 0 Henk 'm!

  • yiko
  • Registratie: September 2003
  • Laatst online: 20-04 20:19
Ik heb het hier net getest, en de return lijkt mij correct te werken
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function return_from_catch()
{
        echo "1";
        try {
                echo "2";
                throw new Exception();
        } catch( Exception $ex ) {
                echo "3";
                return false;
                echo "4";
        }
        echo "5";
        return true;
}

var_dump( return_from_catch() );


code:
1
2
$ /home/yahiko/webdev/php-5.1.2/sapi/cli/php ./return_catch.ph
123bool(false)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hij werkt ook wel, maar hij returnt false, maar voert vervolgens WEL de rest van de code onder de catch{} uit, is het effect van een return in een catch blok binnen een functie anders dan als daarbuiten :?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Lijkt me sterk dat ie na de return nog verder gaat. Ik verwacht eerder dat je de functie nog een keer aanroept, dus controleer daar even op.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • pagani
  • Registratie: Januari 2002
  • Niet online
Óf de fout staat pas ergens verderop in de catchtry, er is geen rollback ofzo, alle code die uitgevoerd wordt wordt gewoon uitgevoerd zeg maar.

[ Voor 4% gewijzigd door pagani op 06-05-2006 02:47 ]