php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.03.2005, 16:01  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 1.531
Quadaptor befindet sich auf einem aufstrebenden Ast
Standard PHP5: Exception im Konstruktor verhindert Instanziierung

Hallo,

das Exception-Handling von PHP5 ist an manchen Stellen wirklich arg verwunderlich:

Wird eine Exception im Konstruktor geworfen, ohne sie abzufangen, wird keine Instanz der Klasse zurückgegeben:

Folgendes Beispiel führt dazu, dass die Methode "foo" nicht aufgerufen werden kann, weil die Variable "obj" kein Objekt ist:

PHP-Code:
<?php
class Sample
{
    public 
__construct()
    {
        throw new 
Exception();
    }

    public function 
foo()
    {
        return 
"bar";
    }
}

$obj = new Sample();
echo 
$obj->foo();
?>
Ist das ein Feature oder ein Bug? Jemand eine Idee, wie das umgangen werden kann?

-Dennis
Quadaptor ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.03.2005, 16:53  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard Re: PHP5: Exception im Konstruktor verhindert Instanziierung

Zitat:
Zitat von Quadaptor
Ist das ein Feature oder ein Bug? Jemand eine Idee, wie das umgangen werden kann?
Simpel: Wirf keine Exception ... oder fange sie ab ...

Immerhin sorgt diese ja erwartungsgemäss dafür, dass __cronstruct() gar nicht bis zum ende durchläuft und somit auch kein Objekt entsteht. Völlig logisch eigentlich.

Ausserdem ist es ja definitiv falsch die Exception nicht abzufangen, würdest du das korrekt tun, würdest du gar nicht erst versuchen, mit dem nicht vorhandenen Objekt weiterzuarbeiten.
Guradia ist offline   Mit Zitat antworten
Alt 31.03.2005, 16:57  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 1.531
Quadaptor befindet sich auf einem aufstrebenden Ast
Standard

Die Exception würde ich schon an einer Stelle abfagen, allerdings nur dort, wo es nötig wäre.
Folgendes würde somit auch nicht klappen:

PHP-Code:
<?php
class Sample
{
    public 
__construct()
    {
        throw new 
Exception();
    }

    public function 
foo()
    {
        return 
"bar";
    }
}

try
{
    
$obj = new Sample();
}
catch (
Exception $e)
{
    
// ...
}

echo 
$obj->foo();
?>
Außerdem fängt man Exceptions selten direkt an der Stelle ab, an der sie geworfen werden, sondern alle in einem Pool, damit für mehrere Exceptions gleichermaßen behandelt werden können.

EDIT: In Java wird trotz Exception eine Klassen-Instanz erstellt, was auch zu erwarten wäre!
Quadaptor ist offline   Mit Zitat antworten
Alt 31.03.2005, 17:06  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Quadaptor
Die Exception würde ich schon an einer Stelle abfagen, allerdings nur dort, wo es nötig wäre.
Folgendes würde somit auch nicht klappen:

PHP-Code:
<?php
class Sample
{
    public 
__construct()
    {
        throw new 
Exception();
    }

    public function 
foo()
    {
        return 
"bar";
    }
}

try
{
    
$obj = new Sample();
}
catch (
Exception $e)
{
    
// ...
}

echo 
$obj->foo();
?>
Da machst du es ja ebenfalls FALSCH ^^
Wenn du da nun eine Ausnahme abfangen musstest, ist es doch recht logisch, dass du für den nachfolgenden Code nun bedingungen schaffen musst, die das weiterlaufen ermöglichen (wozu sonst einen Fehler abfangen?!).

Also mindestens $obj = stdClass() ;P

Allerdings wirst du dann wohl Call to undefined method bekommen ^^

Zitat:
Zitat von Quadaptor
Außerdem fängt man Exceptions selten direkt an der Stelle ab, an der sie geworfen werden, sondern alle in einem Pool, damit für mehrere Exceptions gleichermaßen behandelt werden können.
ist ja auch in ordnung ... denn die Exception bringt einen ja sofort zu nächstliegenden passendene catch ...

Zitat:
Zitat von Quadaptor
EDIT: In Java wird trotz Exception eine Klassen-Instanz erstellt, was auch zu erwarten wäre!
In deiner komischen Welt vielleicht *g*
Mir jedenfalls kommt das unsinnig vor ...
Guradia ist offline   Mit Zitat antworten
Alt 31.03.2005, 17:33  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 1.531
Quadaptor befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Guradia
Zitat:
Zitat von Quadaptor
Die Exception würde ich schon an einer Stelle abfagen, allerdings nur dort, wo es nötig wäre.
Folgendes würde somit auch nicht klappen:

PHP-Code:
<?php
class Sample
{
    public 
__construct()
    {
        throw new 
Exception();
    }

    public function 
foo()
    {
        return 
"bar";
    }
}

try
{
    
$obj = new Sample();
}
catch (
Exception $e)
{
    
// ...
}

echo 
$obj->foo();
?>
Da machst du es ja ebenfalls FALSCH ^^
Wenn du da nun eine Ausnahme abfangen musstest, ist es doch recht logisch, dass du für den nachfolgenden Code nun bedingungen schaffen musst, die das weiterlaufen ermöglichen (wozu sonst einen Fehler abfangen?!).
klingt logisch. es sind ja eigentlich nur die typischen folgefehler, die da entstehen.


Zitat:
Zitat von Guradia
Zitat:
Zitat von Quadaptor
EDIT: In Java wird trotz Exception eine Klassen-Instanz erstellt, was auch zu erwarten wäre!
In deiner komischen Welt vielleicht *g*
Mir jedenfalls kommt das unsinnig vor ...
auf meinen mist ist das nich gewachsen!
Quadaptor ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP: Exceptions - Teil 1 Zergling-new Tutorials 4 05.12.2007 23:31
php5 braucht 4 mal so lange wie php4? CC84 PHP Tipps 2006 4 12.04.2006 09:55
PHP5 erkennt kein PHP5!? DaOnkel PHP Tipps 2006 4 14.03.2006 11:56
[Erledigt] Seit PHP5 - vB sehr Langsam PHP Tipps 2006 3 02.03.2006 10:11
[Erledigt] IIS6 mit PHP5 / CGI-Timeout PHP Tipps 2006 3 01.02.2006 14:00
Apache2 + php5 sehr langsam!! Klaus Server, Hosting und Workstations 13 19.11.2005 09:43
Php4 vs php5 PHP-Fortgeschrittene 10 27.10.2005 00:38
[Erledigt] PHP5 mit Apache zum Laufen bringen... PHP Tipps 2005-2 11 22.10.2005 17:52
php4 und php5 gleichzeitig test022 Server, Hosting und Workstations 13 24.08.2005 10:25
SOAP in PHP5 für NuSoap deaktivieren PHP-Fortgeschrittene 2 03.08.2005 18:23
php4 und php5 auf einem indianer Server, Hosting und Workstations 2 22.05.2005 18:06
suche gut erklärtes Tutorila zu php5 und oop Beitragsarchiv 24 03.03.2005 12:38
[Erledigt] Unterschiedliche Ergebnisse: PHP4 / PHP5 PHP-Fortgeschrittene 2 03.01.2005 00:45
[Erledigt] (PHP5) Frage zu try and catch PHP-Fortgeschrittene 1 30.10.2004 14:46
[Erledigt] Erfahrung mit PHP5 / Stabilität PHP-Fortgeschrittene 3 30.08.2004 12:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php exception im konstruktor, exceptions mit php, exception im konstruktor, konstruktor php5, php constructor wird nicht aufgerufen, php 5 exception, php kann man in einem konstruktor eine exception werfen, php objekt fehler im konstruktor abfangen, php konstruktor exception werfen, instanzieren verhindern php, php exception konstruktor, php construct verhindern, php instanziierung verhindern, php5 exception, php konstruktor fehler exception, php ohne konstruktor, php throw exception constructor, php objekt konstruktor exception, php instanzierung unterbinden, php instanzieren verhindern

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.