2009-11-09 9 views
8
<?php 
    function foo($one, $two){ 
    bar($one); 
    } 

    function bar($one){ 
    echo $one; 
    //How do I access $two from the parent function scope? 
    } 
?> 

Si tengo el código anterior, ¿cómo puedo acceder a la variable $ dos de dentro de la barra(), sin pasándolo en una variable (por razones desconocidas).¿Variable de acceso del alcance de otra función?

Gracias,

Mike

+2

respuesta corta: no lo hace. – helloandre

+0

El objetivo de definir una variable dentro de un ámbito particular es limitar el acceso para que ** no ** sea accesible fuera de ese alcance. Entonces no, no es posible. Si desea hacer esto, no lo defina en el ámbito local: use una clase o alcance global. – Smashery

Respuesta

4

hacer una clase - puede declarar $ dos, como un campo de instancia que será accesible a todos los métodos de instancia:

class Blah { 
    private $two; 
    public function foo($one, $two){ 
    this->$two = $two; 
    bar($one); 
    } 

    public function bar($one){ 
    echo $one; 
    // How do I access $two from the parent function scope? 
    this->$two; 
    } 
} 
+0

Si bien tu respuesta no respondía exactamente la pregunta (todavía tengo curiosidad si es posible fuera de usar una clase), me recordó que ya estaba dentro de una clase, así que simplemente hice un miembro de la clase. Muchas gracias por la ayuda. –

2

Una forma cruda es exportar en el alcance global, por ejemplo:

<?php 
    function foo($one, $two){ 
    global $g_two; 
    $g_two = $two; 
    bar($one); 
    } 

    function bar($one){ 
    global $g_two; 
    echo $g_two; 
    echo $one; 
    //How do I access $two from the parent function scope? 
    } 
?> 
+0

No creo que este sea un buen consejo, incluso si funcionara. –

0

uso $ global para acc variables de ess en todo mi script

De esta manera:

public function exist($id) { 
    global $db; 

    $query = "SELECT * FROM web_users_session where user_id='$id'"; 
    return $this->_check = $db->num_req($query); 
} 
+0

¿Has mirado otras respuestas? Usted los repite y tampoco usó el código para 2 funciones –

Cuestiones relacionadas