2012-01-25 14 views
11

Sembra che se require_once viene chiamato all'interno della funzione, il file incluso non estende l'ambito della variabile globale. Come convertire require_once in un ambito globale all'interno di una funzione?require_once all'ambito globale all'interno di una funzione

Quello che sto cercando di fare è un po 'modulo dinamico caricatore:

function projects_init() 
{ 
     ... 
     foreach ($projects as $p) { 
       require_once($p['PHPFile']); 

       $init_func = $p['init']; 
       if ($init_func) 
         $init_func(); 
     } 
} 

Se non è possibile utilizzare require_once in quel modo, qual è la soluzione più semplice per questo? (Per favore, niente strutture pesanti.)

EDIT: dovrebbe funzionare anche per PHP 5.2.

+0

possibile duplicato di [C'è un modo per impostare esplicitamente l'ambito di require_once() su global?] (Http://stackoverflow.com/questions/8973664/is-there-a-way-to-set-the -scope-of-require-once-explicit-to-global) – Dunhamzzz

+0

È possibile impostare globals nel file incluso o avere un modo diverso di fare ciò che si vuole fare, magari con i caricatori automatici, la riflessione, ecc.Potresti fornirci ulteriori informazioni e potremmo essere in grado di pensare qualcosa di meglio. Non mi piace usare l'ambito globale per compiti che potrebbero essere realizzati in modo diverso. – mobius

+0

ofc è possibile includere file all'interno di una funzione e qualsiasi cosa in quel file globale sarà disponibile globalmente ... – Tudor

risposta

5

Per riassumere tutte le informazioni:

  1. funzioni non sono un problema, saranno comunque globale in questo modo

  2. per le variabili globali, ci sono 2 opzioni:

    • li dichiarano come globale nel file incluso
    • li dichiarano come globale che la funzione (projects_init() nel mio caso)
+3

3. No, non sembra possibile applicare un ambito globale per require_once all'interno di una funzione. (Faccia triste.) –

1

È possibile utilizzare global per inserire una variabile nell'ambito globale.

http://php.net/manual/en/language.variables.scope.php

+2

Eh ?? Come risponde questa domanda? Che dire delle funzioni? – TMS

+1

Oops. Buon punto Potrei comunque chiamare la funzione all'interno dell'altra funzione. http://codepad.org/JvyvP3fU –

+0

Ok, grazie - funziona anche in PHP 5.2. – TMS

4

La risposta di cui sopra è di destra, è possibile utilizzare global per ottenere quello che ti serve. Nel file incluso basta dichiarare le variabili globali all'inizio del file, in questo modo il codice verrà eseguito nell'ambito della funzione ma cambierà le variabili globali (sì, devi stare attento e dichiarare tutto ciò che devi modificare come globale, ma dovrebbe funzionare), ad esempio:

function a() { 
    require_once("a.php"); 
} 
a(); 
echo $globalVariable; 

e nel file a.php:

global $globalVariable; 
$globalVariable="text"; 
+0

Purtroppo il "fare attenzione" non funziona per me, perché ho molte variabili globali (molte sono disponibili solo durante lo sviluppo del software), e non posso aggiungere la parola chiave 'global' ogni volta che ho bisogno di un nuova variabile. Sembra che debba includere tutti i file di cui ho bisogno a livello globale (invece di sceglierne uno dinamicamente) – maja

1

Le funzioni non sono un problema (ref):

Tutte le funzioni e le classi in PHP hanno lo scopo globale - possono essere chiamate all'esterno di una funzione anche se sono state definite all'interno e viceversa.

A proposito di variabili globali: Come in una domanda esistente per quanto riguarda il campo di applicazione require e simili, il campo di applicazione è definito in cui l'uso è. Se hai bisogno di qualcos'altro, ci sono numerose risposte (my take) che mostrano come affrontare le variabili globali, la maggior parte che fa uso di get_defined_vars.

Problemi correlati