2016-07-24 9 views
0

Ich bevorzuge in Python-Sprache zu programmieren, muss aber in PHP für ein bestimmtes Website-App-Projekt arbeiten.Return-Variable funktioniert nicht in PHP (d. H. Kein Wert zurückgegeben!)

In PHP versuche ich, einen Wert von einer Funktion an die Hauptprogrammumgebung "zurückzugeben" (für nachfolgende Berechnungen verwendet werden), aber egal was ich versuche, gibt der in meiner Funktion berechnete Wert den Wert nicht zurück (aber Echo von der Funktion funktioniert gut).

In Python hatte ich nie ein Problem mit der Rückgabe von Variablen: d. H. Alle von Funktionen zurückgegebenen Werte waren verfügbar und zugänglich für das Hauptprogramm und/oder andere Funktionen, die die Funktion aufgerufen haben, die den Rückgabewert erzeugt.

Kann mir bitte jemand sagen, wie ich dieses Problem lösen kann? Ich habe Google und Websites Ike Stackoverflow für die letzten 2 Tage ohne Erfolg gesucht. Ich habe viele O'Reilly-Computerbücher, darunter viele in PHP, wo ich meine Recherchen referenziert und alles gelesen habe, was ich über die RETURN-Funktion kann - es scheint, dass ich alles richtig mache und sogar den zurückzugebenden Wert ausdrücklich deklariere. Es ist entscheidend, dass ich Werte zurückgeben kann und Zugang zu diesen Werten habe, um mit der Entwicklung dieses Projekts fortzufahren - sonst stehe ich fest, wenn ich keine Werte zurückgeben kann, die weiterverarbeitet werden sollen !!

Hier ist der relevante Code Teile:

// DECLARE FUNCTIONS 

// FUNCTION 
function Calculation_IsArray ($ArrayAny){ 
    if (is_array($ArrayAny)) { 
     echo '<div>THIS VAR IS AN ARRAY</div>'; 
     $Var_IsArray = TRUE; 
     return $Var_IsArray; 
    } else { 
     echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
    } 

} 

Nachdem die Funktionen erklärt und erste Berechnungen machen eine Anordnung zur Überprüfung zu packen, I die obige Funktion aufrufen, wie folgt:

// CALL FUNCTION 
Calculation_IsArray($ArrayOfValues); 

I Ich erwarte, dass das Programm die Funktion Calculation_IsArray() aufruft und übergibt es dem zu überprüfenden Array ($ ArrayOfValues). Sie können aus der Ausgabe unten sehen, dass das Array übergeben und überprüft und bestätigt wurde, dass es Array-Typ ist, und sowohl die FOREACH-Schleife als auch die IF/ELSE-Bedingungen funktionieren einwandfrei und geben die korrekte Ausgabe wieder. Der obige Code gibt jedoch keine Werte zurück, da Sie die NULL-Werte sehen können, die ausgegeben werden, wenn ich nach zurückgegebenen Werten (d. H. Dem geprüften Array), die vom Hauptprogramm nach der "Rückkehr" zugänglich sind.

Und hier sind die Ergebnisse Browser Bildschirm angezeigt (Ausgang):


THIS VAR ist ein Array
RETURNED ARRAY =
NULL
Wert von $ Var_IsArray =
NULL
GRAF VON ARRAY KEY ELEMENTS = 2
ARRAY SCHLÜSSELELEMENTE SIND NUMERISCH
KEY = 0, VALUE = Array
ZAHL DER ARRAY KEY EL ABSCHLUSS = 2
ARRAY Schlüsselelemente sind NUMERIC
KEY = 1, VALUE = Array

Ich habe hier bei Stackoverflow gesucht und gefunden Berichte von ähnlichen Problemen (und ich habe sogar versucht, diese Vorschläge für Lösungen zu testen, zum Beispiel Platzieren von Return an verschiedenen Stellen in meiner Funktion, um zu testen, wo es funktionieren würde), aber nichts funktioniert, und dieser Fehler zu Rückgabe Wert ist nicht logisch nach dem, was ich gelesen habe, dass PHP Werte zurückgibt, wenn expliciting sagte RETURN.

Vielen Dank für jede Hilfe in dieser Angelegenheit!

[Nach Vorlage der ursprünglichen Frage oben]:

ich jetzt versuche, mein Problem zu isolieren, indem ein Testskript namens TestReturn.php zu schaffen.

In diesem Skript habe ich den folgenden Code platziert, aber es gibt immer noch keinen Wert zurückgegeben !!

// DECLARE FUNCTIONS 

     // FUNCTION 
     function Calculation_IsArray ($ArrayAny){ 
      if (is_array($ArrayAny)) { 
       echo '<div>THIS VAR IS AN ARRAY</div>'; 
       $Var_IsArray = TRUE; 
       return $Var_IsArray; 
      } else { 
       echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
      } 
     } 

     // BEGIN MAIN PROGRAM 
     $x = array(1, 2, 3, 4, 5, 6, 7); 
     Calculation_IsArray($x); 

     // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE 
     echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:' . $Var_IsArray . '</div>'; 
     var_dump($Var_IsArray); 

Und hier ist die Ausgabe in HTML-Browser-Tab/Fenster/Terminal:


THIS VAR ist ein Array
hier ist der zurückgegebene Wert UND Var_dump UNTEN:
NULL

"Captain, das rechnet nicht!", Dh das macht für mich keinen Sinn, warum PHP meinen Wert nicht zurückgibt, dass ich ihm ausdrücklich sage, dass er zum Hauptprogramm zurückkehren soll!

Ich habe alle Möglichkeiten der Codierung einschließlich versucht:

return $variable; 
return ($variable); 
return() ; // i.e. I read somewhere that PHP by default returns the last calculated value in a function. 
return ; 

Warum ist Hauptprogramm PHP Rückkehr nicht mein Wert/Variable zurück?

+0

Warum nicht false zurück im else-Block? – SOFe

+1

Es wäre hilfreich, wenn Sie den Code schreiben könnten, der versucht, den zurückgegebenen Wert zu verwenden. –

+0

Danke, Freunde! Nachdem ich den ursprünglichen Beitrag gepostet hatte, ging ich zurück und testete einige Tests und aktualisierte den Post hier mit vereinfachtem Code, der versucht, den zurückgegebenen Wert hier für euch zu verwenden, um den vollständigen isolierten Code des Problems zu kopieren und einzufügen. Ich habe versucht, die Rückkehr falsch zu verwenden, aber standardmäßig PHP (ich lese) gibt false/NULL zurück. –

Antwort

0

könnten Sie die Funktion der folgenden vereinfachen, so dass es immer wieder etwas (wahr, falsch)

function Calculation_IsArray($ArrayAny){ 
    echo is_array($ArrayAny) ? '<div>THIS VAR IS AN ARRAY</div>' : '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
    return is_array($ArrayAny); 
} 
+0

10 Ich muss nicht zurückkehren, wenn es ein Array ist. Ich überprüfe, ob es ein Array ist und wenn es ist, dann muss ich einige Werte berechnen und sie als Array zurück zum Hauptprogramm für weitere Berechnungen in anderen Funktionen mit jeweils einem bestimmten Zweck zurückgeben. –

+0

oic - Ich hätte Ihre Frage gründlicher lesen sollen – RamRaider

0
<?php 
// DECLARE FUNCTIONS 

// FUNCTION 
function Calculation_IsArray ($ArrayAny){ 
    if (is_array($ArrayAny)) { 
     echo '<div>THIS VAR IS AN ARRAY</div>'; 
     //$Var_IsArray = TRUE; 
     return true; 
    } else { 
     echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
    } 
} 

// BEGIN MAIN PROGRAM 
$x = array(1, 2, 3, 4, 5, 6, 7); 
$status = Calculation_IsArray($x); 

if($status == true){ 
    // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE 
    echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:<br />' . print_r($x) . '</div>'; 
    var_dump($x); 
} 
+0

Das Problem ist, dass ich einige zusätzliche Berechnungen innerhalb dieser Funktion machen muss und den Wert an das Hauptprogramm für die spätere Verarbeitung zurückgeben. Es ist nicht genug, nur wahr zurückzugeben, dass es ein Array ist. Ich überprüfe, ob es vom Typ Array ist und mache dann einige zusätzliche Berechnungen. Diese berechneten Werte müssen zurückgegeben werden. Ich teste gerade mit einer einzigen Variable zurück, um einfach zu sein. Wenn ich also keine einfache einzelne Variable zurückgeben kann, kann ich kein komplizierteres Array zurückgeben. Daher brauche ich eine Lösung für dieses Problem, bevor ich weitermachen kann. In Python wäre das nicht einmal ein Problem ... –

+0

Sie können alle Sachen mit Ihrem Array in der Funktion Calculation_IsArray(); was du willst und kannst das Zeug in Funktion an Ort und Stelle zurückgeben, um wahr zu sein. –

+0

Ihr Code für mich produziert den folgenden Syntaxfehler: Parse-Fehler: Syntaxfehler, unerwartete $ Ende in/public_html/testreturn.php on line 91 –

0

Hope this helfen:

// FUNCTION 
function Calculation_IsArray ($ArrayAny){ 
    if (is_array($ArrayAny)) { 
     echo '<div>THIS VAR IS AN ARRAY</div>';   
     return true; 
    } else { 
     echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
     return false; 
    } 
} 

$array = array(1, 1, 1); 
if (Calculation_IsArray($array)){ 
    print_r($array); 
}  
+0

Nein, es löst nicht das Problem, da bereits mein Programm erfolgreich HTML zurückgibt. Ich brauche es, um die berechneten Werte/Variablen zurückzugeben und auf diese vom Hauptprogramm aus zugreifen zu können (das alle Funktionen des Programms nacheinander ausführt und nur so aufgerufen wird, wie es für meinen Code erforderlich ist). –

2

Wenn Sie etwas von einer Rückkehr Funktion, es macht die Variable selbst nicht im aufrufenden Bereich verfügbar (dh außerhalb der Funktion). Mit anderen Worten, $Var_IsArray existiert nur innerhalb der Funktion.

Nur der Inhalt der Variablen wird zurückgegeben, und Sie müssen das Ergebnis sofort verwenden, wo Sie die Funktion aufrufen; z.B. Speichern Sie es für zukünftige Referenz, übergeben Sie es an eine andere Funktion oder testen Sie es in einem Zustand.

Zum Beispiel:

function foo() 
{ 
    $vals = ['red', 'green', 'blue']; 
    return $vals; 
} 

$somedata = foo(); 

In diesem Beispiel wird das Array $somedata Ende hält, die zuvor in $vals gelagert wurde.

Dies ist das Standardverhalten für Return-Anweisungen (oder gleichwertige Funktionen) in den meisten Programmiersprachen. Es gibt andere Möglichkeiten, Variablen aus einer Funktion zu entfernen, z. durch Verwendung globaler Variablen. Im Allgemeinen sind sie jedoch keine gute Übung.

Ich habe Python schon früher benutzt, und ich denke nicht, dass es anders ist (es sei denn, ich habe eine wichtige Sprachfunktion verpasst). Vielleicht möchten Sie noch einmal überprüfen, ob Ihr Python-Code das tut, von dem Sie glauben, dass er es tut, sonst könnten Sie in der Zukunft mit einigen scheußlichen Fehlern fertig werden.

+0

Ja, ich denke, ich habe es gerade selbst herausgefunden (und es ein paar Mal getestet - es gibt jetzt Variablen zurück, danke GOTT !!), während du das geschrieben hast und daran erinnert, dass ich das in Python mache: Ich habe ein Variable gleich dem Funktionsaufruf! Ja, du bist richtig, Bruder! Das ist die Lösung! Ich werde meine Antwort in der Bearbeitung des ursprünglichen Beitrags posten, so dass ihr die Code-Lösung sehen könnt - Gott sei Dank, unser Schöpfer, der Gracer of Knowledge ist! Honen HaDa'at !! –

0

ok, also während Peter Bloomfield reagierte und seine RICHTIGE Antwort schrieb, hackte ich mich selbst und versuchte verschiedene Dinge und erinnerte mich daran, was ich auch in Python mache, mache eine Variable gleich dem Funktionsaufruf !! Ich habe es versucht und jetzt gibt es alles wieder gut, was ich mit dieser Funktion mache, Gott sei Dank !!

Hier ist der aktualisierte Code in Hauptprogramm jetzt, dass ok den Rückgabewert erhalten (es wird nicht mehr zurückkehrt nur NULL):

// BEGIN MAIN PROGRAM 
     $x = array(1, 2, 3, 4, 5, 6, 7); 
     $ResultOfCalculation = Calculation_IsArray($x); 

     // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE 
     echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:' . $ResultOfCalculation . '</div>'; 
     var_dump($ResultOfCalculation);