2010-12-16 27 views

Respuesta

35

En include.php:

function myGlobalFunction() { 
    // do someting 
} 

Luego, en cada página que desea utilizar:

include 'include.php'; 
myGlobalFunction(); 
2

Colóquelo en un include, luego inclúyalo.

+0

Lo que sería de otra manera? – Sussagittikasusa

+1

@suss: no tengo idea de qué pensar, ¿por qué necesitas una? – Robert

+0

Está bien, es una línea adicional pero funciona bien:]. – Sussagittikasusa

27

Usted puede declarar una función dentro de una función, tenga cuidado al llamar a la función sólo del exterior una vez o obtendrás un error.

class MyClass { 

    function declareGlobalsFn() { 
    // functions declared inside a function have global scope 

    function globalfn1() {echo "fn1";} 

    function globalfn2() {echo "fn2";} 
    } 
} 

$ob = new MyClass(); 
$ob->declareGlobalsFn(); 

globalfn1(); // fn1 
globalfn2(); // fn2 
+2

wow, esta es para mí una nueva forma de crear funciones. Parece una buena pregunta para un examen de PHP. ¿Este código se ejecutará o no? ¿Son cierres o no? :-) ¿Puede decirme cuándo es una buena práctica? Por lo que puedo ver, incluir o requerir la misma función, pero los dos últimos son mejores para el mantenimiento. De todos modos, para bien o para peor, me aprendiste algo. Es por eso que voté por encima de tu respuesta. Aunque ninguno de ustedes realmente respondió la pregunta. Esa respuesta es simple: todas las funciones que no son miembros de la clase tienen alcance global. –

+0

No veo ninguna buena razón para definir funciones de esta manera. Entre otras cosas, 'declareGlobalsFn()' no se puede llamar dos veces, o se obtiene: 'PHP Fatal error: Can redeclare globalfn1()' –

+1

Eso también es nuevo para mí. Hay una muy buena razón: puede combinar declaración con herencia 'llamando a parent :: declareGlobalsFn()' y evitar un error al [verificar la existencia] (http://php.net/manual/de/function.function- exists.php) primero. – Robert

30

Si desea que su función sea siempre disponible, sin incluirla, hacer esto:

  1. Crear su función en un archivo php.

  2. En su búsqueda php.ini para la opción auto_prepend_file y añadir su archivo PHP a esa línea, así:

    auto_prepend_file = "/path/to/my_superglobal_function.php"

O si usted lo escribe con una trayectoria no absoluta, de esta manera:

auto_prepend_file = "my_superglobal_function.php"

que se verá en su include_path en php.ini para encontrar el archivo.

+1

¡Es bueno saberlo!¡Esto podría ser muy útil en algunas situaciones! – BrainStone

+1

Esta debería ser la respuesta aceptada, porque resuelve el problema de ** cualquier página **. –

+3

Esta no es la mejor solución porque usted (u otras personas, que ni siquiera pueden saberlo) tiene que modificar todos los entornos en los que se usa su aplicación – Lambrusco

1

Then in every page you want to use it:

include 'include.php'; myGlobalFunction();

-

Put it in an include, then include it.

Este técnicamente puede no ser correcta, dependiendo del contexto.

'Página' podría percibirse como 'archivo', por ejemplo, "Debe incluir el archivo de la función dentro de cada archivo que desee utilizar la función".

Una vez que se define una función en su programa, se puede acceder desde cualquier lugar avanzando hasta que el programa haya terminado de ejecutarse.

Digamos que tiene esto:

index.php:

<?php 

function echo_1() { 
    echo 1; 
} 

echo_1(); 

require 'boot.php'; 

boot.php

<?php 

include_once 'page.php'; 

echo_1(); 
echo_9342949(); 

página.php

<?php 

function echo_9342949() { 
    echo 9342949; 
} 

echo_1(); 

Con eso, su salida sería 1119342949.

Por supuesto, cuando dice 'página' puede significar literalmente un archivo de página 'independiente' directamente accesado ', en cuyo caso las respuestas de los otros usuarios serán suficientes. Sin embargo, si está buscando utilizar la misma función desde diferentes ubicaciones de su programa, simplemente defínala antes de utilizarla y podrá acceder a ella desde cualquier lugar, independientemente del alcance.

Editar:

However, if you're looking to use the same function from different locations throughout your program, simply define it before you intend to use it and you can access it anywhere moving forward regardless of scope.

de corregirme, esto por supuesto no es cierto para cosas como funciones de clase, pero para las funciones normales esto sigue siendo cierto.

1

Para expandir en luarwo's answer, puede declarar la función directamente en el constructor de su clase. Esto podría hacer que su clase sea una especie de biblioteca de funciones, donde las funciones son accesibles desde cualquier página donde crea su instancia de clase.

recinto de seguridad \ MyGameLib

<?php 
namespace Sandbox; 
class MyGameLib { 
    public function __construct() { 
     if (!function_exists('loveGame')) { 
      function loveGame($game) { 
       print "The game $game is awesome"; 
      } 
     } 
    } 
} 

Balancín

<?php 
namespace Seesaw; 
use Sandbox\MyGameLib; 

$m = new MyGameLib(); 
loveGame('Tempest'); 

The game Tempest is awesome

+0

Esto es realmente incorrecto ya que la función no será global sino que formará parte del espacio de nombres 'Sandbox'. – andig

Cuestiones relacionadas