J'ai un tableau à l'extérieur:
$myArr = array();
Je souhaite donner à ma fonction l'accès au tableau situé en dehors de celui-ci afin qu'il puisse y ajouter des valeurs
function someFuntion(){
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal;
}
Comment est-ce que je donne à la fonction la portée adéquate à la variable?
Par défaut, lorsque vous êtes dans une fonction, vous n'avez pas accès aux variables externes.
Si vous voulez que votre fonction ait accès à une variable externe, vous devez la déclarer en tant que global
, à l'intérieur de la fonction:
function someFuntion(){
global $myArr;
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal;
}
Pour plus d'informations, voir Variable scope .
Mais notez que utiliser des variables globales n'est pas une bonne pratique: avec cela, votre fonction n'est plus indépendante.
Une meilleure idée serait de rendre votre fonction renvoyer le résultat:
function someFuntion(){
$myArr = array(); // At first, you have an empty array
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal; // Put that $myVal into the array
return $myArr;
}
Et appelez la fonction comme ceci:
$result = someFunction();
Votre fonction pourrait aussi prendre des paramètres, et même travailler sur un paramètre passé par référence:
function someFuntion(array & $myArr){
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal; // Put that $myVal into the array
}
Ensuite, appelez la fonction comme ceci:
$myArr = array( ... );
someFunction($myArr); // The function will receive $myArr, and modify it
Avec ça :
Pour plus d’informations à ce sujet, vous devriez lire la section Fonctions du manuel PHP, et plus particulièrement les sous-sections suivantes:
$foo = 42;
$bar = function($x = 0) use ($foo){
return $x + $foo;
};
var_dump($bar(10)); // int(52)
$myArr = array();
function someFuntion(array $myArr) {
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal;
return $myArr;
}
$myArr = someFunction($myArr);
Global $myArr;
$myArr = array();
function someFuntion(){
global $myArr;
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal;
}
Soyez prévenu, généralement les gens s'éloignent des globals car il a quelques inconvénients.
Tu pourrais essayer ça
function someFuntion($myArr){
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal;
return $myArr;
}
$myArr = someFunction($myArr);
Cela ferait en sorte que vous ne comptiez pas sur Globals.
Le seul et probablement le moins bon moyen d'atteindre votre objectif serait d'utiliser des variables globales.
Vous pouvez y parvenir en ajoutant global $myArr;
au début de votre fonction ..__ Cependant, notez que l'utilisation de variables globales est dans la plupart des cas une mauvaise idée et probablement évitable.
Le meilleur moyen serait de passer votre tableau en argument à votre fonction:
function someFuntion($arr){
$myVal = //some processing here to determine value of $myVal
$arr[] = $myVal;
return $arr;
}
$myArr = someFunction($myArr);
Deux réponses
1. Réponse à la question posée.
2. Un simple changement équivaut à une meilleure solution!
Réponse 1 - Passez le tableau Vars à la classe __construct () dans une classe. Vous pouvez également laisser la construction vide et passer les tableaux à la place de vos fonctions.
<?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>";
?>
Réponse 2 - Un simple changement le mettrait cependant en conformité avec les normes modernes ... Déclarez simplement vos tableaux dans la classe.
<?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>";
?>
Les deux options génèrent les mêmes informations et permettent à une fonction d'envoyer et de récupérer des informations d'un tableau et de sous-tableaux à n'importe quel emplacement du code (étant donné que les données ont été transférées en premier). La deuxième option permet de mieux contrôler la manière dont les données sont utilisées et protégées. Ils peuvent être utilisés tels quels, selon vos besoins, mais s'ils étaient utilisés pour étendre un contrôleur, ils pourraient partager leurs valeurs entre toutes les classes utilisées par le contrôleur. Aucune de ces méthodes ne nécessite l'utilisation d'un ou plusieurs globaux.
Sortie:
Résultats du contenu personnalisé de la matrice
Modals - Compte: 5
une
b
c
FOO
foo
JS Custom - Nombre: 9
1
2B ou non 2B
3
42
5
voiture
maison
bicyclette
verre