Bien, parece que tengo un concepto erróneo con alcance variable con PHP, perdone mi falta del tema ya que provengo de un fondo Java, C#. Pensando que podría hacer que las variables sean accesibles para funciones o declaraciones simplemente colocándolo fuera de él. A continuación se muestra un fragmento de lo que estoy tratando de lograr:Problema de alcance variable con sentencias if (PHP)
foreach ($nm as $row=>$im) {
$itm_name = $im;
$lnk = $lnk_cty[$row];
if($mode == 'addMenu') {
$m = $m_id; //id will be coming from fresh insert of menu_name
} else {
$m = $_POST['mnu_add'][$row];
echo "MENU_ID: ".$m;
}
if($mode == 'addCat') {
$m = $c_id; //id will be coming from fresh insert of cat_name
} else {
$m = $_POST['cat_add'][$row];
}
//used for testing purposes
echo "item name: ".$itm_name ."<br />";
echo "lnk: ".$lnk ."<br />";
echo "m: ".$m ."<br />"; //$m is empty here, because its a new declaration as oppose to accessing $m value from if statement
$display_fields .= "<li>".$itm_name." ".$item."</li>";
$sql_array[] = '("' . $itm_name . '", "' . $lnk . '", ' . $m . ')'; // Add a new entry to the queue
}
Ahora lo que estoy tratando de hacer es hacer que los valores de las variables $m
accesible fuera del if su adentro a la variable $m
utilizado en la declaración $sql_array[]
. En C#, simplemente declararía una variable fuera del ciclo foreach y podría usarla. Después de leer el asunto, descubrí que usar las palabras clave globales o GLOBALES solo funcionaría si mi variable de ámbito global es asignar el valor antes que el foreach y declarar global $m
para obtener ese valor dentro del ciclo. Pero con mi código actual $m
tiene un alcance local dentro de las declaraciones if y todos desaniman su uso. Ahora, ¿hay un mejor método para hacer que $m
esté accesible para la declaración $sql_array[]
?
¿qué significa: 'id * will be * coming?' –
La fuente de la ID sería ... –
@ Aurel300 gracias mr. Traductor. ¿Podría indicar el valor real de $ m_id en el tiempo de ejecución? –