Domanda

In PHP, come si usa un $ var esterno da usare all'interno di una funzione in una classe? Ad esempio, dire $ some_external_var impostato su true e hai qualcosa come

class myclass {
bla ....
bla ....

function myfunction()  {

  if (isset($some_external_var)) do something ...

   } 

}


$some_external_var =true;

$obj = new myclass();
$obj->myfunction();

Grazie

È stato utile?

Soluzione

Global $ some_external_var;

function myfunction()  {
  Global $some_external_var;
  if (!empty($some_external_var)) do something ...

   } 

}

Ma poiché Global lo imposta automaticamente, controlla se non è vuoto.

Altri suggerimenti

Dovrai utilizzare il global parola chiave all'interno della tua funzione, per rendere visibile la tua variabile esterna a quella funzione.

Ad esempio:

$my_var_2 = 'glop';

function test_2()
{
    global $my_var_2;
    var_dump($my_var_2);  // string 'glop' (length=4)
}

test_2();

Puoi anche usare l'array $ GLOBALS , che è sempre visibile, anche all'interno delle funzioni.


Ma in genere non è considerata una buona pratica usare variabili globali: le tue classi non dovrebbero dipendere da un tipo di roba esterna che potrebbe o non potrebbe esserci!

Un modo migliore sarebbe quello di passare le variabili necessarie come parametri, ai metodi stessi o al costruttore della classe ...

questo è un cattivo design del software. Perché una classe funzioni, deve essere fornita di dati. Quindi, passa quella var esterna nella tua classe, altrimenti stai creando dipendenze non necessarie.

Perché non passare questa variabile durante __construct () e subordinare il comportamento dell'oggetto durante la costruzione al valore di verità di quella variabile?

Usa setter e getter o forse una configurazione centralizzata come:

function config()
{
  static $data;

  if(!isset($data))
  {
    $data = new stdClass();
  }

  return $data;
}

class myClass
{
    public function myFunction()
    {
        echo "config()->myConfigVar: " . config()->myConfigVar;
    }
}

e usalo:

config()->myConfigVar = "Hello world";

$myClass = new myClass();
$myClass->myFunction();

http://www.evanbot.com/article/universally inoltre accessibili-dati-php / 24

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top