1

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;
InThaHouse
  • 455
  • 2
  • 5
  • 14
  • Es porque le estás pasando a `$secretaria` "materias", que no tiene ningún valor, ni siquiera es una variable. deberías poner `array_push($secretaria->$materia);` y ya está – Juanant Feb 12 '19 at 12:59
  • ¿Qué contiene **$secretaria->materias**? ¿Es un array? La función espera como primer parámetro un array y parece que no lo está recibiendo. – phpMyGuel Feb 12 '19 at 12:59
  • Sí, $secretaria->materias es un array. @PHPMyguel – InThaHouse Feb 12 '19 at 13:01
  • No me queda del todo claro. Trata de hacerle un var_dump() en la línea antes de usar el array_push() y péganos el resultado. – phpMyGuel Feb 12 '19 at 13:03
  • A ver si entonces lo que te falta es el símbolo $ en materias – Juanant Feb 12 '19 at 13:06
  • 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). Si llamas a la función así: `materiasPredefinidas($secretaria);` y cambias la signatura de la misma así: `function materiasPredefinidas($secretaria){ ... }` debería funcionar. – A. Cedano Feb 12 '19 at 13:14

1 Answers1

3

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?

A. Cedano
  • 86,578
  • 19
  • 122
  • 221