2012-04-05 4 views
2
public function makeTweet($DatabaseObject, $TextObject, $MessageObject) 
{ 
    if($DatabaseObject == NULL) 
    { 
     $DatabaseObject = new Database(); 
     $TextObject = new Text(); 
     $MessageObject = new Message(); 
    } 
    $TweetObject = new ControlTweet();   
    $TweetObject->setObjects($DatabaseObject, $TextObject, $MessageObject); 
    return $TweetObject; 
} 
+0

Können Sie bitte Ihre ganze Klasse zeigen? – Neal

+0

http://stackoverflow.com/questions/1985182/can-i-overload-methods-in-php –

+0

@ Michael..danke .... Ich denke, das ist besser als verschiedene Namen. –

Antwort

1

Sie optionale Parameter in der Funktionsdeklaration wie hinzufügen

$obj->makeTweet($db, $text, $messageObj); 

oder

$obj->makeTweet($db, $text); 

Dies ist das nächste, was Sie in PHP bekommen können.

+0

O.K das ist der beste Weg ... einfach den Standardwert auf null setzen. –

+0

null null vs. NULL? –

+0

@GuyMontag Wir sprechen über PHP. So oder so ist es in Ordnung :) – PeeHaa

1

Sie können eine Funktion in PHP nicht überladen. Sehen Sie diese Seite als Referenz:

public function makeTweet($DatabaseObject, $TextObject, $MessageObject = null) 

Jetzt können Sie entweder tun: http://www.daniweb.com/web-development/php/threads/19978/overloading-php-functions

+0

-1 Sie können die Funktionalität einer überladenen Funktion mit ein wenig Know-how spiegeln. Siehe meine Antwort (http://stackoverflow.com/a/10035436/144665). – iambriansreed

+0

Vielen Dank, es ist nicht wie ich es bereits kommentiert hatte .. nur mit ein wenig ps. für jeden, der es liest. Und meine Antwort war auf die Frage "Was ist der richtige Weg, um Funktionen in PHP zu überlasten", so dass ich mich nicht zu sehr ins Detail ging. Stattdessen stellte ich einen Link zur weiteren Lektüre bereit, wenn das OP interessiert war. Danke trotzdem. – RyanS

+0

Gern geschehen. Ihr Link ist das sechste Ergebnis in einer Google-Suche. Zumindest haben Sie Ihre falsche Antwort gefunden. – iambriansreed

-1

PHP-Funktionen können "überladen" werden. Verwenden Sie func_get_args und setzen Sie keine Variablen in die Funktion.

Sie könnten auch ein assoziatives Array als einzelne Variable übergeben. Dann können Sie extrahieren innerhalb der Funktion verwenden, um freundliche Variablen zu machen.

$vars = array('key1'=>'value1','key2'=>'value3'); 

function function_name($v){ 
    extract($v); 

    //do something 
} 

Damit sich die Funktion anders verhält, müssen Sie bestimmen, was Ihre Variablen sind. Auf diese Weise können Sie die Überladungsidee widerspiegeln.

+1

Ich habe Sie neu eingestellt, aber das ist nicht der beste Weg in meinem Fall. Ich habe einfach = NULL hinzugefügt und das Äquivalent einer überladenen Funktion erhalten, indem ich nur eine if-Anweisung hinzugefügt habe. Viel einfacher, NULL für meinen Fall zu verwenden. Wahrscheinlich abhängig davon, wie dies offensichtlich ist, wofür func_get_args verwendet wird. –

+0

Wenn Sie nicht vergessen, 'null' hinzuzufügen. – iambriansreed

+1

Dies erlaubt nur eine halbe Arbeit, was ist, wenn Sie die tatsächliche Funktion unterscheiden möchten? Anders als die Verwendung von Schleifen gibt es keine Möglichkeit, die zusätzlichen Parameter sowieso zu handhaben. – RyanS