2016-03-21 2 views
-1

Hallo ich habe Frage ist es möglich, Standard-Parameter der Funktion als Ergebnis der anderen Funktion hinzufügen? Zum Beispiel:Hinzufügen von Standard-Parameter der Funktion als Ergebnis der anderen Funktion

static function addParameter(){ 
return rand(10,100) 
} 

function doSomething($year=$this->addParameter()) or 
function doSomething($year=class::addParameter()) 

Ich muss tatsächlich Jahr und Monat zu meiner Funktion übergeben. Wenn ich übergebe

Funktion ($ month = 3, $ year = 2016)

es dann arbeiten, aber ich will das nicht von der Hand schreiben, aber will Funktion oder etwas verwenden, um immer aktuelle zurückkehren Monat und Jahr.

+0

nicht sicher, ob ich bekommen, was Sie erreichen wollen , aber meinst du Standardwerte? – Epodax

+0

Standard bedeutet, wenn Funktion starten und niemand ihre Parameter ändern Sie arbeiten auf Parameter, die in ihr standardmäßig – qwerty

Antwort

2

Kurze Antwort: Nein, Sie können nicht. http://php.net/manual/en/functions.arguments.php heißt:

Der Standardwert ein konstanter Ausdruck sein muss, nicht (zum Beispiel) eine Variable ist, ein Klassenmitglied oder ein Funktionsaufruf.

Sie Standard-Null-Wert verwenden (wenn normalerweise Funktion nicht ein übernimmt) und prüfen, ob Parameter null ist, dann wird der Wert von der Funktion erhalten:

function testfun($testparam = null) { 
    if ($testparam == null) $testparam = myclass::funToReturnParam(); 
    // Rest of function body 
} 
1

Yo kann es wie dieses

<?php 
class Core { 
    static function addParameter(){ 
     return rand(10,100); 
    } 
} 

$core = new Core(); 

function doSomething($rand){ 
    echo 'this is rand '.$rand; 
    } 

doSomething(Core::addParameter()); 

implementieren Sie können die Funktion defination ändern Ihre Anforderung nach. hoffen, es hilft :)

+0

schreiben, aber das ist, wenn ich mit der Arbeit begann ich möchte wissen, es ist möglich, Parameter übergeben, wenn ich diese Funktion nicht induzieren schreiben Ihr – qwerty

+0

Leider ist das nicht möglich, Sie können einen Workaround haben, wie @topher suggeriert – FastTurtle

1

Vom PHP Manual (Hervorhebung von mir):

Der Standardwert ein konstanter Ausdruck sein muss, nicht (zum Beispiel) eine Variable, ein Klassenmitglied oder einen Funktionsaufruf .

Also nur skalare Typen (boolean, int, string usw.), Arrays und null sind erlaubt.

Eine Abhilfe könnte zu überprüfen, wenn der Parameter null ist und legen Sie es in der Funktion:

function doSomething($year = null) { 
    if (!$year) { 
     $year = addParameter(); 
    } 
    //actually do something 
}