php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.08.2006, 11:09  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Verkettung von Funktionen - keine Rückgabe

Hallo zusammen,

ich habe mir mal wieder etwas zusammengeschrieben. Aber ich bin mir nicht sicher, ob man das so machen kann. Na ja, zumindest läuft es nicht - zwar keine Fehlerausgabe, aber kein return.

Zwei Dateien:

index.php
PHP-Code:
//...
include_once( 'php/footer.php' );
//...
//Funktionsaufruf
echo makeFooter($modified='',$name=''); 
footer.php

PHP-Code:
function makeFooter $modified$name ) {

    if ( empty(
$modified) || empty($name) ) {

                
//Stellt die Vars zu Verfügung
        
$id     intvalmosGetParam$_GET'id''' ));
        
$option mosGetParam$_GET'option''' );

        switch (
strtolower($option)) {

            case 
'com_content'
                
content $id );
                break;

            case 
'com_skiba':
                
skiba $id );
                break;

            default : 
//Startseite
                
content $id=);
                break;
        }
    
    } else {

        
$footer_info '|Letzte Änderung [b]'.$modified.'[/b]|'.$name;
    
        return 
$footer_info;
      }   
}

function 
content $id ) {

    
// Datenbankabfragen nach $modified und $name über die $id
        // Die Vars stehen zur Verfügung zumindest in der Funktion!

    
reArrange $modified$name );
}

function 
skiba $id ) { 

    
// Datenbankabfragen nach $modified und $name über die $id
        // Die Vars stehen zur Verfügung zumindest in der Funktion!
    
    
reArrange $modified$name );
}


function 
reArrange $modified$name ) {

    if (empty(
$modified)) {
        
$modified='unbekannt';
    } 
    else {
        list(
$date$time) = explode(' '$modified);
        list(
$jahr$monat$tag) = explode('-'$date);
        
$modified $tag '.' $monat '.' $jahr;
    }
    
    if(empty(
$name)) {
         
$name 'unbekannt';
    }

    
makeFooter $modified$name );

Leider wird kein Wert zurückgegeben.
Vielleicht kann man das auch noch anders machen, aber ich weiß derzeit nicht, wie man eine Funktion aufruft, Werte an eine zweite weitergibt und das Ergebnis der zweiten Funktion wieder ausgibt. Vielleicht stehe ich auch auf der Leitung. Derzeit weiß ich nicht, warum kein Wert zurückgegeben wird.

Gruß
Tine
tinchen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.08.2006, 11:49  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Auf den ersten Block seh ich Folgendes:
PHP-Code:
// Datei index.php
// ...
echo makeFooter($modified='',$name='');

// -------------------

// datei footer.php
function makeFooter $modified$name ) {

    if ( empty(
$modified) || empty($name) ) {
      
// ...
    
} else {
      
// ...
      
return $footer_info;
    }   

$modified und $name werden als leere Strings übergeben. Ergo sind sogar beide leer und innerhalb der Funktion wird der if-Block ausgeführt. Der besitzt aber keinen Rückgabewert (return) und somit ist garnicht verwunderlich, dass die Funktion nichts zurück gibt ^^ Soweit ich das überblicke besitzen die andere 3 Funtkionen ebenfalls keinen Rückgabewert.

Ausserdem: makefooter kann content oder skiba aufrufen, die wiederum reArrange aufrufen, die dann wiederum makeFooter aufrufen... Irgendwie wirkt es merkwürdig und hat möglicherweise Potential zu einer Endlosschleife.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 29.08.2006, 12:55  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Zitat:
innerhalb der Funktion wird der if-Block ausgeführt. Der besitzt aber keinen Rückgabewert (return) und somit ist garnicht verwunderlich, dass die Funktion nichts zurück gibt
Richtig, da soll ja auch gar nichts zurückgegeben werden. Erst sollen ja die anderen Funktionen content bzw. skiba gefolgt von reArrange ausgeführt werden. In reArrange schließe ich aus, dass die stings $name bzw. $modified leer sein können, so dass der else Teil der makeFooter Funktion aufgerufen wird, der mir die Werte dann per return zurück gibt.

Wenn ich gänzlich auf Funktionen verzichte und nur mit if und else arbeite läuft das ganze, aber mit Funktionen nicht.

Ich verstehe noch nicht so ganz, wie ich eine Funktion aufrufen kann, so dass die ermittelten Werte dann an eine zweite Funktion übergeben werden, die dann beim Aufruf der ersten Funktion ausgegeben werden. Ich denke schon, dass aus dem Code deutlich wird, was ich tun möchte, aber es funktioniert einfach nicht.

Gruß
Tine
tinchen ist offline  
Alt 29.08.2006, 13:05  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Du machst ja nichts mit den Rückgabewerten. in reArrange() steht einfach makeFooter() ohne, dass der Rückgabewert entgegengenommen würde und in content() das gleiche Spiel mit reArrange().

Villeicht erstmal die Funktionen sinnig benennen. Die Fnktion makeFooter() "macht" keinen Footer (bzw. schon, aber implizit), sondern gibt ihn in erster Linie zurück. Genauer noch, gibt sie keinen Footer zurück, sondern eine Zeile mit Änderungsdatum und dem Namen des letzten Autors.

Ist wohl das gleiche Thema, wie in dem lnk()-Thread kürzlich. *g

Prinzipiell verstehe ich aber deinen Aufbau nicht. Wozu reArrange()? Warum schreibst du nicht eine Funktion, die eben aus den Parametern $modified und $name ggf. diese Zeile erzeugt. Die müsste dann vom Footer aus afgerufen werden, in den die Daen ja gesetzt werden sollen. Fragt sich, wie die Parameter da hinkommen ... argh! ... ich komm nicht klar mit dieser prozeduralen Programmiererei - da krigt mans ja an der Klatsche!

Basti

PS:
Achso, mal strftime() und strptime() anschauen.
Basti ist offline  
Alt 29.08.2006, 13:12  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ne, ehrlich gesagt verstehe ich dein Problem nicht.
Du rufst eine Funktion auf, die kein Rückgabewert besitzt und eine Funktion aufruft, die kein Rückgabewert besitzt und wiederum eine Funktion aufruft, die kein Rückgabewert besitzt... Dann ist doch klar, dass nichts bei rum kommt ^^

Vielleicht verstehe ich dich insofern falsch, dass du denkst, dass ein return in der zuletzt aufgerufenen Funktion bis ganz an den Anfang zurückgereicht wird. Dem ist aber nicht so

Code:
index.php --> makeFooter --> content --> reArrange --> makeFooter
Das letzte makeFooter gibt etwas an reArrange zurück. Der Rückgabewert wird aber dort nicht weiter behandelt und alle anderen Funktionen geben einfach garnix zurück. Du musst das Ergebniss dann schon wieder bis an den Anfang zurückreichen

Versuch mal und setz vor jeden Funktionsaufruf (also vor jedes skiba, content, reArrange und vor das letzte [i]makeFooter[i]) ein return. Zusätzlich kannst du dann auf viele break verzichten, da return einen Funktionsaufruf von sich aus abbricht und zur übergeordneten Instanz zurück kehrt.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 29.08.2006, 14:05  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Das mit dem return funktioniert leider nicht - das gibt nen knackigen Fehler.
So wäre mir das ganze eigentlich am liebsten.

PHP-Code:
$id     intvalmosGetParam$_GET'id''' ));
$option mosGetParam$_GET'option''com_none' );

switch (
strtolower($option)) {

      case 
'com_content':
          
content $id );
          break;

       case 
'com_skiba':
           
skiba $id );
           break;

       default : 
//Startseite
            
content $id=);
            break; 

}

function 
content $id ) {

    
// Datenbankabfragen nach $modified und $name über die $id
        // Die Vars stehen zur Verfügung zumindest in der Funktion!

    
reArrange $modified$name );
}

function 
skiba $id ) {

    
// Datenbankabfragen nach $modified und $name über die $id
        // Die Vars stehen zur Verfügung zumindest in der Funktion!
    
    
reArrange $modified$name );
}


function 
reArrange $modified$name ) {

    if (empty(
$modified)) {
        
$modified='unbekannt';
    }
    else {
        list(
$date$time) = explode(' '$modified);
        list(
$jahr$monat$tag) = explode('-'$date);
        
$modified $tag '.' $monat '.' $jahr;
    }
    
    if(empty(
$name)) {
         
$name 'unbekannt';
    }

    
$footer_info '|Letzte Änderung [b]'.$modified.'[/b]|'.$name;

    
// vielleicht kein return, sondern etwas was ich noch nicht kenne
    // der string $footer_info soll global zur Verfügung stehen, so dass ich in der index.php 
    // nur mit echo $footer_info aufrufen muss - geht das?
    
return $footer_info;  

Wenn das funktioniert kümmere ich mich um die Datumgeschichte, die breaks und die anderen Dinge.
Wie wird nun $footer_info global in der index.php zu Verfügung gestellt?

Gruß
Tine
tinchen ist offline  
Alt 29.08.2006, 15:04  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Am Besten garnicht, weil das ist unschön, lass es am Besten. Das macht nur Ärger

Welcher Fehler wird denn überhaupt verursacht?
KingCrunch ist offline  
Alt 29.08.2006, 15:20  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Jetzt gibt reArrange() schonmal einen Wert zurück. Aber wohin?

Basti
Basti ist offline  
Alt 29.08.2006, 15:39  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Na zum Funktionsaufruf von
PHP-Code:
reArrange $modified$name ); 
oder nicht?

Ich komm nicht mehr so richtig mit.

Gruß
Tine
tinchen ist offline  
Alt 29.08.2006, 15:56  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Er will damit sagen, dass dein Rückgabewert ins Leere läuft, wenn du nichts damit anstellst.

PHP-Code:
<?php
"blub";
?>
Das ist auch ein gültiger Aufruf, aber es passiert absolut nichts. Du musst den String schon weiterverarbeiten (z.B. ausgeben).
Zergling-new ist offline  
 


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
Templatesystem mit Funktionen und Variablen drin? BartTheDevil89 PHP Tipps 2008 6 01.07.2008 09:32
rekursive Funktionen ?? usima PHP Tipps 2008 2 04.05.2008 11:25
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
eine Variable für alle Funktionen definieren Wing PHP Tipps 2007 16 24.06.2007 21:02
PHP Funktionen immer aufrufen DaniGro PHP-Fortgeschrittene 3 28.08.2006 16:35
Funktionen überprüfen und Grafik Funktionen hans.karl2 PHP Tipps 2006 10 31.07.2006 20:08
Funktionen in Funktionen - ist das gut? Schneckenkind PHP Tipps 2006 23 10.06.2006 13:39
funktionen trinity PHP Tipps 2006 4 27.05.2006 13:21
Problem mit Global Scope von Funktionen WickedImp PHP-Fortgeschrittene 13 16.05.2006 00:30
Globale Variabeln in Funktionen finerip PHP Tipps 2007 3 28.11.2005 16:00
Funktionen aufrufen PHP Tipps 2005 5 31.01.2005 10:57
Eure Ideen sind gefragt: eigene Funktionen verwalten PHP-Fortgeschrittene 12 17.01.2005 15:00
[Erledigt] mysql funktionen nicht verfügbar. PHP-Fortgeschrittene 7 07.11.2004 10:38
Funktionen auslagern und auf variablen zugreifen Crypi PHP Tipps 2004 3 14.10.2004 13:43
Funktionen Erklärung TheSkaterFriend PHP Tipps 2004 14 11.06.2004 22:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
verkettung optionen, grad der verkettung von funktionen, php funktionsaufruf verkettung, php verkettung option, php verkettung funktionsaufrufe, verkettung funktionen in php, php kein übergabewert $_get

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