Problema con array_push dentro de función

publicado por: Anonymous

Tengo un problema con la función de array_push, si pongo dentro de una función el siguiente código me salta el siguiente error :

Warning: array_push() expects parameter 1 to be array, null given

El código es el siguiente :

function materiasPredefinidas(){

    $materia = new Materia("Matematicas");
    array_push($secretaria->materias,$materia); //ERROR
    $_SESSION['materias'] = $secretaria->materias;

    $materia = new Materia("Historia");
    array_push($secretaria->materias,$materia); //ERROR
    $_SESSION['materias'] = $secretaria->materias;

    }

// Llamar a la función.
materiasPredefinidas();

Si pongo el código fuera de una función funciona correctamente.

$materia = new Materia("Matematicas");
array_push($secretaria->materias,$materia);
$_SESSION['materias'] = $secretaria->materias;

$materia = new Materia("Historia");
array_push($secretaria->materias,$materia);
$_SESSION['materias'] = $secretaria->materias;

solución

Es un problema de ámbito, o sea, dentro de la función no existe $secretaria->materias porque ese objeto no aparece declarado en ese contexto (el de la función), de ahí el null given.

Para meter al objeto $secretaria dentro del contexto de la función, tienes que pasarlo en parámetro.

Debería funcionar si:

A. Modificas la signatura de la función así:

# $secretaria no está en el ámbito de la función
# por tanto debe recibirla como parámetro
function materiasPredefinidas($secretaria){ 

    //... código 

}

B. Haces la llamada así:

$secretaria = ....                   #La variable está en este contexto
materiasPredefinidas($secretaria);   #Pero no está en el contexto de materiasPredefinidas
                                     #por tanto, tienes que pasársela

Para más detalles puedes consultar: ¿Cuál es el ámbito y el ciclo de vida «real» de una variable global en PHP?

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *