Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
02.06.2011, 17:01
Megge



Laut
http://php.net/manual/de/language.exceptions.php
sollte der Code innerhalb eines Try-Blocks nicht mehr ausgeführt werden, wenn eine Exception geworfen wird. Mein Code sieht so aus:

PHP-Quellcode:<?php
try
{
  
$datum = new DateTime($_GET['date']);
  
$datum->setTime($datum->format("H"),0,0);
}
catch(
Exception $e)
{
  
$msg[] = "Das Datum ist ungültig!";
}
?>
DateTime wirft Expections, z.B. dann, wenn ein Datum falsch initialisiert wird. Beispielsweise wenn $_GET['date'] irgendwas unsinniges ist. In meinem Fall wird dann aber dennoch der Rest im Try-Block ausgeführt; also:
PHP-Quellcode:<?php
$datum
->setTime($datum->format("H"),0,0);
?>
Das zeigt mir der Fehler an:
Fatal error: Call to a member function format() on a non-object in ...etc

Wie kann das sein?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
02.06.2011, 17:19
Bluthund



Der Code oben funktioniert hier wie gewuenscht wenn der DateTime-Kontruktor mit Muell gefuettert wird: Exception fliegt, wird gefangen und das Script beendet normal (die Zeilen nach dem fehlgeschlagenen Kontruktor kommen nicht zur Ausfuehrung).

Beim Extrahieren des Code-Beispiels irgendwas uebersehen?

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
002
02.06.2011, 17:19
Adrian_Broher
Admin


Dies ist ein Inkonsistentes Verhalten in PHP, welches in 5.3 korrigiert wurde:

Zitat:
http://www.php.net/manual/en/datetime.construct.php
5.3.0 If an invalid date is specified, then an exception is now thrown. Previously an error was emitted.

--

There is nothing wrong with high standards. It's your problem that you don't meet them.
If you think it's simple, then you have misunderstood the problem.
When a customer says "nothing has changed", assume they're lying.


Dieser Beitrag wurde am 02.06.2011 um 17:20 von Adrian_Broher bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
02.06.2011, 17:47
Megge



@Adrian_Broher
Ich hab PHP 5.3.1, die Exception wird zudem ja auch geworfen.

@Bluthund
Stimmt. Der Code wird tatsächlich nicht ausgeführt. Hab's ausprobiert. Dennoch meckert PHP, da der Parser an der Stelle mit dem setTime ein Objekt erwartet, jedoch kein Objekt kommt. Aber halt nur dann, wenn vorher ne Exception geworfen wurde, kommt kein Objekt hinterher. Daher: der Parser gibt mir einen Error, obwohl der nur auftauchen kann, wenn eine Exception geworfen wird. Reichlich dümmlich.
Habs jetzt mal so gelöst, dass ich ein mit $datum = new DateTime() zuerst sicherstelle, dass ein DateTime-Objekt in $datum drin ist, überschreibs aber ne Zeile später dann.
dünket mich unsauber, fürs erste aber die einzige einigermassen elegenate Lösung.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
02.06.2011, 17:53
Adrian_Broher
Admin


Was ist denn in $datum direkt nach dem Aufruf des Konstruktors drin?

--

There is nothing wrong with high standards. It's your problem that you don't meet them.
If you think it's simple, then you have misunderstood the problem.
When a customer says "nothing has changed", assume they're lying.

zum Seitenanfang zum Seitenende Profil || Suche
005
02.06.2011, 18:12
Megge



Zitat:
Adrian_Broher postete
Was ist denn in $datum direkt nach dem Aufruf des Konstruktors drin?
Das DateTime-Objekt, wenn der Konstruktor keine Exception wirft, ansonsten k/a. Oder wie meinst du das?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
02.06.2011, 18:21
Adrian_Broher
Admin


Was es laut Handbuch machen sollte weiss ich. Was macht es in deinem Code?

Quellcode:<?php
  $datum = new DateTime($_GET['date']);
  var_dump($datum);
?>

--

There is nothing wrong with high standards. It's your problem that you don't meet them.
If you think it's simple, then you have misunderstood the problem.
When a customer says "nothing has changed", assume they're lying.


Dieser Beitrag wurde am 02.06.2011 um 18:22 von Adrian_Broher bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
02.06.2011, 18:37
caedes



Ist "Expection" nen PHP-Fachbegriff für ne Exception, die man erwartet?

--

caedes

Deutschland rückt nach Einschätzung der Sicherheitsbehörden im Superwahljahr verstärkt ins Visier von Terroristen.

zum Seitenanfang zum Seitenende Profil || Suche
008
02.06.2011, 19:19
Bluthund



Zitat:
Megge postete
@Bluthund
Stimmt. Der Code wird tatsächlich nicht ausgeführt. Hab's ausprobiert. Dennoch meckert PHP, da der Parser an der Stelle mit dem setTime ein Objekt erwartet, jedoch kein Objekt kommt.
Da stimmt irgendetwas nicht. Zumindest hier (und so moechte man es wohl auch ueberall erwarten; mit Ausnahme der von Adrian genannten Inkonsistenz) gibt der PHP-Interpreter _keine_ Fehler aus:Quellcode:$ php
<?php
try
{
  $datum = new DateTime('foobar');
  $datum->setTime($datum->format("H"),0,0);
}
catch(Exception $e)
{
  echo "Das Datum ist ungültig!\n";
}
?>
Das Datum ist ungültig!
$ php --version
PHP 5.3.5-1ubuntu7.2 with Suhosin-Patch (cli) (built: May  2 2011 23:00:17)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
(Code leicht angepasst fuer direkte Ausgabe des Fehlers im Exception-Handler und fester, fehlerhafter Eingabe)
Zitat:
Habs jetzt mal so gelöst, dass ich ein mit $datum = new DateTime() zuerst sicherstelle, dass ein DateTime-Objekt in $datum drin ist, überschreibs aber ne Zeile später dann.
dünket mich unsauber, fürs erste aber die einzige einigermassen elegenate Lösung.
Naw~, das ist doch keine Loesung und elegant schon garnicht.
Der Interpreter hat in der Zeile nach dem Konstruktor schlicht und ergreifend nix zu suchen wenn davor eine Exception geworfen wird. Du schreibst immer "der Parser"… darf man mal eine exakte Kopie des Fehlers sehen? Denn fuer den Parser gibt es an dem Code eigentlich nichts auszusetzen.

Zitat:
caedes postete
Ist "Expection" nen PHP-Fachbegriff für ne Exception, die man erwartet?
++

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
009
02.06.2011, 19:39
Megge



Ich fress nen Besen...
Genau der gleiche Code tut nun bei mir... obwohl ich nichts geändert hab ._0

--

zum Seitenanfang zum Seitenende Profil || Suche
010
02.06.2011, 19:45
caedes



Schweizer Computer brauchen nur länger, um Änderungen zu bemerken :-P

--

caedes

Deutschland rückt nach Einschätzung der Sicherheitsbehörden im Superwahljahr verstärkt ins Visier von Terroristen.

zum Seitenanfang zum Seitenende Profil || Suche
011
07.07.2011, 08:57
default



In most languages Exceptions indicate a fail, in PHP you Expect fail.
php.net: Expection

--

Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst.

zum Seitenanfang zum Seitenende Profil || Suche