php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.01.2006, 17:40  
Gast
 
Beiträge: n/a
Standard Verkettete Methodenaufrufe

Code:
class a
	{
	 public function get_huhu()
	  {return "huhu
\n";}
	}

class b
	{
	 private $my_a=null;
	 public function __construct()
	  {$this->my_a=new a();}
	 public function get_a()
	  {return $this->my_a;}
	}

$test=new b();

// Ist dieser Aufruf mit allen PHP-Versionen > 5 kompatibel?
// Mir ist so, als hätte ich gelesen, dass dies nicht immer funktioniert.
// Bei mir, php5.0.3, gibt es dabei keine Probleme.
echo 'variante 1: ', $test->get_a()->get_huhu();

// Oder sollte man generell lieber soetwas verwenden?
$tmp=$test->get_a();
echo 'variante 2: ', $tmp->get_huhu();
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.01.2006, 20:44  
Gast
 
Beiträge: n/a
Standard Re: Verkettete Methodenaufrufe

Zitat:
Zitat von YaB
Code:
// Ist dieser Aufruf mit allen PHP-Versionen > 5 kompatibel?
Diese Versionen sind bei mir noch etwas rar... :wink:


Wenn Du die Vorgängerversionen meinen solltest: Nein!

Wobei Deine Klassen selber aber auch alles andere als abwärtskompatibel sind.
  Mit Zitat antworten
Alt 07.01.2006, 21:01  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

es sollte schon immer funktionieren.

es kommt eigentlich immer darauf an, wie wohl du dich dabei fühlst, so
PHP-Code:
<?php
echo $a -> b() -> c() -> d();
?>
zu programmieren.

es spricht nichts dagegen, das so zu machen, aber der editieraufwand beim debuggen ist extrem.
nimm nur mal an, irgendeine methode (b(), c() oder d()) enthält einen bug und du bekommst einen fatal error beim ausführen des genannten codes...
um nachzugucken, was buggy ist, müsstest du aus
PHP-Code:
<?php
echo $a -> b() -> c() -> d();
?>
folgendes machen:

PHP-Code:
<?php
$b 
$a -> b();
var_dump($b);
$c $b -> c();
var_dump($c);
$d $c -> d();
var_dump($d);
echo 
$d;
?>
... ein extremer editieraufwand, den du nicht ganz so gehabt hättest, wenn du gleich variablen deklariert hättest.

den selben editieraufwand hast du auch, wenn sich das ganze
später ändert und du irgendwo bedingungen oder
fehlerbehandlungen einfügen musst.
allerdings finde ich die erste methode deutlich schöner, und in
maßen angewendet ist das ganze auch lesbarer.
das deklarieren von variablen, die nur ein einziges mal benutzt
werden, ist auch kacke und macht code hässlich.

man muss sich halt darauf verlassen, dass die benutzten
methoden alle zuverlässig arbeiten.
axo ist offline   Mit Zitat antworten
Alt 07.01.2006, 21:06  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von axo
nimm nur mal an, irgendeine methode (b(), c() oder d()) enthält einen bug und du bekommst einen fatal error beim ausführen des genannten codes...
Nimm nur mal an es kommt gar nicht erst so weit...
  Mit Zitat antworten
Alt 07.01.2006, 21:24  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von karl-150
Nimm nur mal an es kommt gar nicht erst so weit...
das hab ich schon lang aufgegeben. murphy's law sagt, es kommt mindestens ein mal so weit.
axo ist offline   Mit Zitat antworten
Alt 07.01.2006, 21:46  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von axo
es sollte schon immer funktionieren.

es kommt eigentlich immer darauf an, wie wohl du dich dabei fühlst, so
PHP-Code:
<?php
echo $a -> b() -> c() -> d();
?>
zu programmieren.
eigentlich ganz gut, mir gefällt diese syntax, so wie dir

Zitat:
Zitat von axo
es spricht nichts dagegen, das so zu machen, aber der editieraufwand beim debuggen ist extrem.
nimm nur mal an, irgendeine methode (b(), c() oder d()) enthält einen bug und du bekommst einen fatal error beim ausführen des genannten codes...
joh, hab ich auch schon leidig feststellen müssen (Fatal error: Call to a member function assign() on a non-object ) und man fragt sich, warum ist das kein objekt?
darum lasse ich mir zur zeit alle fehler "ausprinten", aber ich denke man kommt bei größeren projekten nicht um eine vernünftige exception-handling bzw. error-klasse herum.

++++++++++++++++++++++++++++++++++++++++++++++
karl-150 hat Folgendes geschrieben:
Nimm nur mal an es kommt gar nicht erst so weit...

axo hat daraufhin folgendes geschrieben:
das hab ich schon lang aufgegeben. murphy's law sagt, es kommt mindestens ein mal so weit.
++++++++++++++++++++++++++++++++++++++++++++++

ich denke, karl-150 meint damit, dass kein fatal error geschmissen wird und man sich daraufhin einen wolf sucht, weil das script gant anders "arbeitet" als erwartet
  Mit Zitat antworten
Alt 07.01.2006, 22:01  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von YaB
ich denke, karl-150 meint damit, dass kein fatal error geschmissen wird und man sich daraufhin einen wolf sucht, weil das script gant anders "arbeitet" als erwartet
hmm... kann wirklich gut sein, dass ich karl auch nicht verstanden habe, aber dich verstehe ich jetzt genausowenig ... wenn ein skript ganz anders 'arbeitet' als erwartet erfüllt es einfach nicht seine spezifikation, ganz egal ob man die methodenaufrufe direkt verkettet oder über variablen ???
axo ist offline   Mit Zitat antworten
Alt 07.01.2006, 22:41  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von axo
... wenn ein skript ganz anders 'arbeitet' als erwartet erfüllt es einfach nicht seine spezifikation, ganz egal ob man die methodenaufrufe direkt verkettet oder über variablen ???
hm, hast ja recht - der aufruf ist dabei völlig egal.
ich hatte mich nur gerade über das ungewollte typecasting von php rumgeärgert - sollte die kiste jetzt ausschalten.

ich zitiere dich mal: "Problem Appears Between Keyboard And Chair"
  Mit Zitat antworten
Alt 08.01.2006, 07:17  
Gast
 
Beiträge: n/a
Standard

(Auch) aus diesem Grund wurden Exceptions eingeführt.

PHP-Code:
<?php
class foo
{
    public function 
a() {
        throw new 
LogicException('A strange game. The only winning move is not to play.');
    }
}

try {
    
$f = new foo;
    
$f->a()->b();
}
catch (
Exception $e) {
   echo 
'Caught exception: ',  $e->getMessage(), "\n"
       
$e->getTraceAsString(), "\n";
}
?>
  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
verkettete Liste Nixwisser PHP Tipps 2007 3 07.03.2007 20:23
[Erledigt] verkettete liste PHP-Fortgeschrittene 5 07.09.2005 10:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php verkettete methoden, verkettete methodenaufrufe, php aufrufe verketten, php verkettung von methodenaufrufen, this verkettete methodenaufrufe, verkettete methode, methodenaufruf php, verkettete methoden, methoden aufrufe verketten, verkettete methoden unter php, php verkettete klassen, methoden verketten php, methodenaufrufe in php feststellen, php verkettete methodenaufruf, php verkettete methodenaufrufe, thread c methodenaufruf

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:00 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.