2012-06-18 21 views
24
function parts($part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($tructure . $part . '.php'); 
} 

Questa funzione utilizza una variabile $site_url che è stata definita nella parte superiore di questa pagina, ma questa variabile non viene passato alla funzione.PHP uso funzione variabile dall'esterno

Come si ottiene per tornare nella funzione?

risposta

51

Aggiungere secondo parametro

è necessario passare parametro aggiuntivo alla funzione:

function parts($site_url, $part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

In caso di chiusure

Se si vuole usare chiusure allora si può importare la variabile nello scope corrente (la parola chiave use):

$parts = function($part) use ($site_url) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

global - una cattiva pratica

Questo post è spesso letta, quindi qualcosa deve essere chiarita su global. Usarlo è considerato una cattiva pratica (fare riferimento a this e this).

Per amore di completezza ecco la soluzione utilizzando global:

function parts($part) { 
    global $site_url; 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($structure . $part . '.php'); 
} 

Funziona perché si deve dire all'interprete che si desidera utilizzare una variabile globale, ora pensa è una variabile locale (in un raggio la tua funzione).

Letture consigliate:

0

Basta inserire nella funzione: global $ SITE_URL;

34

In alternativa, è possibile inserire le variabili dall'ambito esterno utilizzando le chiusure con la parola chiave use.

$myVar = "foo"; 
$myFunction = function($arg1, $arg2) use ($myVar) 
{ 
return $arg1 . $myVar . $arg2; 
}; 
+1

Questo modo è un po 'difficile, ad esempio se si dispone di 10 variabili in questo modo sarà difficile. – M98

+1

php mostra errore, perché? Errore di sintassi: errore di sintassi, 'uso' imprevisto (T_USE), in attesa di '{' – M98

+1

@Kermani si sta probabilmente utilizzando una versione precedente di PHP che non ha la sintassi 'use'. Questa sintassi è stata introdotta in PHP5.3. Vedi https://wiki.php.net/rfc/closures –