Domanda

Considera la seguente situazione

file: ./include/functions/table-config.php contenente:

.
.
$tablePages = 'orweb_pages';
.
.

file: ./include/classes/uri-resolve.php contenente:

class URIResolve {
.
.
$category = null ;
.
.
function process_uri() {
...
    $this->category = $tablePages;
...
}
.
.
}

file: ./settings.php contenente:

.
.
require_once(ABSPATH.INC.FUNC.'/table-config.php');
require_once(ABSPATH.INC.CLASS.'/uri-resolve.php');
.
.
Funzionerà? Voglio dire, l'accesso a $ tablePages da process_uri () sarà accettabile o darà risultati errati.

Suggerire correzioni o soluzioni alternative in caso di errore.

È stato utile?

Soluzione

Utilizza una classe di configurazione globale (non consigliata), costante o singleton.

Semplicemente includendo

$tablePages = 'orweb_pages';

fornirà il tuo ambito locale variabile in modo che non sia visibile all'interno di altre classi. Se usi una costante:

define('TABLE_PAGES', 'orweb_pages');

TABLE_PAGES sarà disponibile per l'accesso in lettura in tutta l'applicazione indipendentemente dall'ambito.

Il vantaggio di una costante rispetto a una variabile globale è che non devi preoccuparti che venga sovrascritto in altre aree dell'applicazione.

Altri suggerimenti

Usa la parola chiave globale :

Nel file in cui si sta assegnando il valore.

global $tablePages;
$tablePages = 'orweb_pages';

E nell'altro file:

class URIResolve {
  var $category;
  function process_uri() {
    global $tablePages;
    $this->category = $tablePages;
  }
}

Inoltre, tutte le variabili globali sono disponibili nell'array $ GLOBALS (che di per sé è un superglobal), quindi puoi accedere alla variabile globale ovunque senza usare la parola chiave globale facendo qualcosa del genere:

$my_value = $GLOBALS['tablePages'];

Questo serve anche a rendere più difficile sovrascrivere accidentalmente il valore del globale. Nel primo esempio, qualsiasi modifica apportata a $ tablePages cambierebbe la variabile globale. Molti bug di sicurezza sono stati creati avendo un $ user globale e sovrascrivendolo con le informazioni di un utente più potente.

Un altro approccio ancora più sicuro è fornire la variabile nel costruttore a URIResolve:

class URIResolve {
  var $category;

  function __construct ($tablePages) {
    $this->category= $tablePages;
  }

  function process_uri() {
    // Now you can access table pages here as an variable instance
  }
}

// This would then be used as:
new URIResolve($tablePages);
<?php
 //Use variable php : $GLOBALS in __construct
 $x = "Example variable outer class";

class ExampleClass{
    public $variables; 
  function __construct()
  {
    $this->variables = $GLOBALS; //get all variables from $GLOBALS
  }
    // example get value var 
  public function UseVar(){
   echo $this->variables['x']; // return Example variable outer class
  }
    // example set value var
  public function setVar(){
    $this->variables['x'] = 100;
  } 
}
echo $x // return Example variable outer class;

$Example = new ExampleClass();
$Example->UseVar(); // return Example variable outer class
$Example->setVar(); // $x = 100;

// or use attr variables 
echo $Example->variables['x']; // 100
$Example->variables['x'] = "Hiii"; 
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top