Mis archivos PhP contienen algunas constantes de cadena largas y estoy tratando de factorizarlas. Así que creé "my_string_constants.php" y usé include en header.php. Hasta ahora eso funciona bien.

Ahora otro archivo, page.php también requiere las constantes de cadena y header.php. El siguiente esquema trata de aclarar estas dependencias.

enter image description here

Las constantes de cadena ahora parecen estar disponibles solo en mi encabezado, no en el resto de mi página. Intenté resolver esto agregando global ... a cada constante de cadena en string_constants.php. Esto resolvió el error de "Variable desconocida", pero mis constantes de cadena todavía no están disponibles para la mayoría del contenido de la página.

¿Cuál es la forma correcta de hacer que esto funcione?

ACTUALIZACIÓN

El problema ha sido resuelto . Debería haber usado define(myString en lugar de $myString = .... Al hacerlo, solo necesito uno include en header.php y las constantes también estarán disponibles para page.php.

Un millón de gracias, ustedes son geniales.

1
RubenGeert 28 dic. 2016 a las 21:59

3 respuestas

La mejor respuesta

Una cosa que desearía hacer es distinguir una constante de una variable. Especialmente si otros desarrolladores terminan trabajando en esto, su terminología los confundirá.

Para las constantes, no es necesario declararlas como globales y se definen así:

define('MY_CONSTANT', 'Value');

Me parece que el archivo de constantes está actuando como el archivo de configuración de todo el sitio, por lo que para mí, tiene sentido tener eso en cada página, independientemente de si se usa o no el encabezado. Normalmente crearía un archivo de arranque para este propósito.

Bootstrap.php:

<?php
require_once(__DIR__ . '/constants.php');
require_once(__DIR__ . '/database.php');
require_once(__DIR__ . '/session.php');

Obtiene el punto, entonces cada página accesible debe incluir este archivo de arranque y luego posiblemente el encabezado.

Page.php:

<?php
require_once(__DIR__ . '/bootstrap/bootstrap.php');
require_once(__DIR__ . '/header.php');
?>
<h1>Page Title</h1>

En header.php, dado que requiere estas constantes, puede manejar esto de dos maneras, ya sea verificando que las constantes estén definidas (es decir, bootstrap se incluyó primero) o simplemente use otro require_once para asegurarse de que se cargó el archivo.

if (!defined('MY_CONSTANT')) exit('Bootstrap failure');

O

require_once(__DIR__ . '/bootstrap/constants.php');
3
Devon 28 dic. 2016 a las 19:24

En la página de encabezado encima de escribir
incluye 'header.php';

Y en header.php que escribes incluyen 'my_string_constants.php';

Entonces, en este caso, page.php llama al encabezado y en el encabezado se llama a my_string_constants ... ¿es esto lo que quieres decir?

0
Jurick Pastechi Genaro 28 dic. 2016 a las 19:12

Ir a muchos directorios o "archivos" con respecto a las inclusiones puede causar problemas más adelante cuando intentas depurar. Como regla, trato de ir solo un nivel más profundo en lo que respecta a la inclusión de archivos. Es decir. Cree una carpeta llamada incluye y coloque todo allí. Si hay un archivo que necesita múltiples variables, funciones, etc., entonces inclúyalos en las páginas necesarias en ese punto haciendo varias inclusiones como esta:

<?php 
include("includes/header.php"); 
includes("includes/functions.php");
?>

También hay otros problemas con respecto a tener múltiples inclusiones, como si tiene sesiones o cookies, algunas pilas de LAMP requerirán que declare

session_start();

En la parte superior de cada página, incluidos todos los archivos php incluidos que pueden necesitar acceso a esa sesión o cookie.

Entonces, para responder a su pregunta, creo que la solución más simple sería reorganizar su sitio o script.

1
technology101010 28 dic. 2016 a las 19:06