Pregunta

Considere la siguiente situación

archivo: ./include/functions/table-config.php que contiene:

.
.
$tablePages = 'orweb_pages';
.
.

archivo: ./include/classes/uri-resolve.php que contiene:

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

archivo: ./settings.php que contiene:

.
.
require_once(ABSPATH.INC.FUNC.'/table-config.php');
require_once(ABSPATH.INC.CLASS.'/uri-resolve.php');
.
.
Esto funcionara. Quiero decir, ¿será aceptable el acceso a $ tablePages desde process_uri () o dará resultados erróneos.

Sugiera correcciones o soluciones alternativas si se puede producir un error.

¿Fue útil?

Solución

Utilice una clase de configuración global (no recomendada), una constante o una única.

Simplemente incluyendo

$tablePages = 'orweb_pages';

le dará a su alcance local variable para que no sea visible dentro de otras clases. Si usa una constante:

define('TABLE_PAGES', 'orweb_pages');

TABLE_PAGES estará disponible para acceso de lectura en toda la aplicación, independientemente del alcance.

La ventaja de una constante sobre una variable global es que no tiene que preocuparse de que se anule en otras áreas de la aplicación.

Otros consejos

Utilice la palabra clave global :

En el archivo donde está asignando el valor.

global $tablePages;
$tablePages = 'orweb_pages';

Y en el otro archivo:

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

Además, todas las variables globales están disponibles en la matriz $ GLOBALS (que en sí es una superglobal), por lo que puede acceder a la variable global en cualquier lugar sin usar la palabra clave global haciendo algo como esto:

$my_value = $GLOBALS['tablePages'];

Esto también sirve para dificultar la sobrescritura accidental del valor global. En el ejemplo anterior, cualquier cambio que haya realizado en $ tablePages cambiaría la variable global. Se han creado muchos errores de seguridad al tener un $ user global y sobrescribirlo con la información de un usuario más potente.

Otro enfoque aún más seguro es proporcionar la variable en el constructor para 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"; 
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top