Wenn Sie sich in einer Funktion befinden, haben Sie standardmäßig keinen Zugriff auf die äußeren Variablen.
Wenn Ihre Funktion Zugriff auf eine äußere Variable haben soll, müssen Sie diese global
innerhalb der Funktion wie folgt deklarieren :
function someFuntion(){
global $myArr;
$myVal =
$myArr[] = $myVal;
}
Weitere Informationen finden Sie unter Variabler Bereich .
Beachten Sie jedoch, dass die Verwendung globaler Variablen keine gute Vorgehensweise ist : Damit ist Ihre Funktion nicht mehr unabhängig.
Eine bessere Idee wäre, Ihre Funktion das Ergebnis zurückgeben zu lassen :
function someFuntion(){
$myArr = array();
$myVal =
$myArr[] = $myVal;
return $myArr;
}
Und rufen Sie die Funktion folgendermaßen auf:
$result = someFunction();
Ihre Funktion kann auch Parameter annehmen und sogar an einem Parameter arbeiten, der als Referenz übergeben wird :
function someFuntion(array & $myArr){
$myVal =
$myArr[] = $myVal;
}
Rufen Sie dann die Funktion folgendermaßen auf:
$myArr = array( ... );
someFunction($myArr);
Mit diesem :
- Ihre Funktion hat das externe Array als Parameter erhalten
- Und kann es ändern, wenn es als Referenz übergeben wird.
- Und es ist besser als die Verwendung einer globalen Variablen: Ihre Funktion ist eine Einheit, unabhängig von externem Code.
Weitere Informationen hierzu finden Sie im Abschnitt Funktionen des PHP-Handbuchs und insbesondere in den folgenden Unterabschnitten:
global
Methode verweist auf globale Variable, nicht außerhalb!$foo = 42; $bar = function($x = 0) use ($foo){ return $x + $foo; }; var_dump($bar(10)); // int(52)
UPDATE: Es gibt jetzt Unterstützung für Pfeilfunktionen, aber ich werde jemanden zulassen, der es mehr verwendet hat, um die Antwort zu erstellen
quelle
Global $myArr; $myArr = array(); function someFuntion(){ global $myArr; $myVal = //some processing here to determine value of $myVal $myArr[] = $myVal; }
Seien Sie gewarnt, im Allgemeinen halten sich die Menschen von den Globalen fern, da dies einige Nachteile hat.
Sie könnten dies versuchen
function someFuntion($myArr){ $myVal = //some processing here to determine value of $myVal $myArr[] = $myVal; return $myArr; } $myArr = someFunction($myArr);
Das würde es so machen, dass Sie sich nicht auf Globals verlassen.
quelle
$myArr = array(); function someFuntion(array $myArr) { $myVal = //some processing here to determine value of $myVal $myArr[] = $myVal; return $myArr; } $myArr = someFunction($myArr);
quelle
Der einzige und wahrscheinlich nicht so gute Weg, um Ihr Ziel zu erreichen, wäre die Verwendung globaler Variablen.
Sie können dies erreichen, indem Sie
global $myArr;
am Anfang Ihrer Funktion hinzufügen . Beachten Sie jedoch, dass die Verwendung globaler Variablen in den meisten Fällen eine schlechte Idee ist und wahrscheinlich vermieden werden kann.Der viel bessere Weg wäre, Ihr Array als Argument an Ihre Funktion zu übergeben:
function someFuntion($arr){ $myVal = //some processing here to determine value of $myVal $arr[] = $myVal; return $arr; } $myArr = someFunction($myArr);
quelle
Zwei Antworten
1. Beantworten Sie die gestellte Frage.
2. Eine einfache Änderung ist ein besserer Weg!
Antwort 1 - Übergeben Sie das Vars-Array an __construct () in einer Klasse. Sie können das Konstrukt auch leer lassen und die Arrays stattdessen über Ihre Funktionen übergeben.
<?php // Create an Array with all needed Sub Arrays Example: // Example Sub Array 1 $content_arrays["modals"]= array(); // Example Sub Array 2 $content_arrays["js_custom"] = array(); // Create a Class class Array_Pushing_Example_1 { // Public to access outside of class public $content_arrays; // Needed in the class only private $push_value_1; private $push_value_2; private $push_value_3; private $push_value_4; private $values; private $external_values; // Primary Contents Array as Parameter in __construct public function __construct($content_arrays){ // Declare it $this->content_arrays = $content_arrays; } // Push Values from in the Array using Public Function public function array_push_1(){ // Values $this->push_values_1 = array(1,"2B or not 2B",3,"42",5); $this->push_values_2 = array("a","b","c"); // Loop Values and Push Values to Sub Array foreach($this->push_values_1 as $this->values){ $this->content_arrays["js_custom"][] = $this->values; } // Loop Values and Push Values to Sub Array foreach($this->push_values_2 as $this->values){ $this->content_arrays["modals"][] = $this->values; } // Return Primary Array with New Values return $this->content_arrays; } // GET Push Values External to the Class with Public Function public function array_push_2($external_values){ $this->push_values_3 = $external_values["values_1"]; $this->push_values_4 = $external_values["values_2"]; // Loop Values and Push Values to Sub Array foreach($this->push_values_3 as $this->values){ $this->content_arrays["js_custom"][] = $this->values; } // Loop Values and Push Values to Sub Array foreach($this->push_values_4 as $this->values){ $this->content_arrays["modals"][] = $this->values; } // Return Primary Array with New Values return $this->content_arrays; } } // Start the Class with the Contents Array as a Parameter $content_arrays = new Array_Pushing_Example_1($content_arrays); // Push Internal Values to the Arrays $content_arrays->content_arrays = $content_arrays->array_push_1(); // Push External Values to the Arrays $external_values = array(); $external_values["values_1"] = array("car","house","bike","glass"); $external_values["values_2"] = array("FOO","foo"); $content_arrays->content_arrays = $content_arrays->array_push_2($external_values); // The Output echo "Array Custom Content Results 1"; echo "<br>"; echo "<br>"; echo "Modals - Count: ".count($content_arrays->content_arrays["modals"]); echo "<br>"; echo "-------------------"; echo "<br>"; // Get Modals Array Results foreach($content_arrays->content_arrays["modals"] as $modals){ echo $modals; echo "<br>"; } echo "<br>"; echo "JS Custom - Count: ".count($content_arrays->content_arrays["js_custom"]); echo "<br>"; echo "-------------------"; echo "<br>"; // Get JS Custom Array Results foreach($content_arrays->content_arrays["js_custom"] as $js_custom){ echo $js_custom; echo "<br>"; } echo "<br>"; ?>
Antwort 2 - Eine einfache Änderung würde sie jedoch an moderne Standards anpassen. Deklarieren Sie einfach Ihre Arrays in der Klasse.
<?php // Create a Class class Array_Pushing_Example_2 { // Public to access outside of class public $content_arrays; // Needed in the class only private $push_value_1; private $push_value_2; private $push_value_3; private $push_value_4; private $values; private $external_values; // Declare Contents Array and Sub Arrays in __construct public function __construct(){ // Declare them $this->content_arrays["modals"] = array(); $this->content_arrays["js_custom"] = array(); } // Push Values from in the Array using Public Function public function array_push_1(){ // Values $this->push_values_1 = array(1,"2B or not 2B",3,"42",5); $this->push_values_2 = array("a","b","c"); // Loop Values and Push Values to Sub Array foreach($this->push_values_1 as $this->values){ $this->content_arrays["js_custom"][] = $this->values; } // Loop Values and Push Values to Sub Array foreach($this->push_values_2 as $this->values){ $this->content_arrays["modals"][] = $this->values; } // Return Primary Array with New Values return $this->content_arrays; } // GET Push Values External to the Class with Public Function public function array_push_2($external_values){ $this->push_values_3 = $external_values["values_1"]; $this->push_values_4 = $external_values["values_2"]; // Loop Values and Push Values to Sub Array foreach($this->push_values_3 as $this->values){ $this->content_arrays["js_custom"][] = $this->values; } // Loop Values and Push Values to Sub Array foreach($this->push_values_4 as $this->values){ $this->content_arrays["modals"][] = $this->values; } // Return Primary Array with New Values return $this->content_arrays; } } // Start the Class without the Contents Array as a Parameter $content_arrays = new Array_Pushing_Example_2(); // Push Internal Values to the Arrays $content_arrays->content_arrays = $content_arrays->array_push_1(); // Push External Values to the Arrays $external_values = array(); $external_values["values_1"] = array("car","house","bike","glass"); $external_values["values_2"] = array("FOO","foo"); $content_arrays->content_arrays = $content_arrays->array_push_2($external_values); // The Output echo "Array Custom Content Results 1"; echo "<br>"; echo "<br>"; echo "Modals - Count: ".count($content_arrays->content_arrays["modals"]); echo "<br>"; echo "-------------------"; echo "<br>"; // Get Modals Array Results foreach($content_arrays->content_arrays["modals"] as $modals){ echo $modals; echo "<br>"; } echo "<br>"; echo "JS Custom - Count: ".count($content_arrays->content_arrays["js_custom"]); echo "<br>"; echo "-------------------"; echo "<br>"; // Get JS Custom Array Results foreach($content_arrays->content_arrays["js_custom"] as $js_custom){ echo $js_custom; echo "<br>"; } echo "<br>"; ?>
Beide Optionen geben dieselben Informationen aus und ermöglichen es einer Funktion, Informationen von einem Array und Sub-Arrays an eine beliebige Stelle im Code zu übertragen und abzurufen (vorausgesetzt, die Daten wurden zuerst übertragen). Die zweite Option bietet mehr Kontrolle darüber, wie die Daten verwendet und geschützt werden. Sie können so verwendet werden, wie sie nur Ihren Anforderungen entsprechen. Wenn sie jedoch zum Erweitern eines Controllers verwendet werden, können sie ihre Werte für eine der vom Controller verwendeten Klassen freigeben. Keine der beiden Methoden erfordert die Verwendung eines Global (s).
Ausgabe:
Array Benutzerdefinierte Inhaltsergebnisse
Modalitäten - Anzahl: 5
ein
b
c
FOO
foo
JS Custom - Anzahl: 9
1
2B oder nicht 2B
3
42
5
Auto
Haus
Fahrrad
Glas
quelle