Как настроить переменные для всего сайта в php?

Я хочу определить что-то подобное в php :

$EL = "\n<br />\n";

а затем использовать эту переменную в качестве маркера "конечной строки" на всем моем сайте, например:

echo "Blah blah blah{$EL}";

Как мне определить $ EL один раз (только в 1 файле), включить его на каждую страницу моего сайта и не ссылаться на него, используя (как ни странно) global $EL; оператор в каждой функции страницы?

Ответов (11)

Решение

У большинства сайтов PHP должен быть файл (я называю его заголовком), который вы включаете на каждую страницу сайта. Если вы поместите эту первую строку кода в файл заголовка, затем включите ее следующим образом на каждую страницу:

 include 'header.php';

вам не придется использовать ключевое слово global или что-то еще, вторая строка кода, которую вы написали, должна работать.

Изменить: Ой, извините, это не будет работать внутри функций ... теперь я вижу вашу проблему.

Изменить № 2: Хорошо, примите мой первоначальный совет с заголовком, но используйте define (), а не переменную. Они работают внутри функций после включения.

@svec да, это будет, вам просто нужно также включить файл внутри функции. Так работает большая часть моего программного обеспечения.

function myFunc()
 {
require 'config.php';
//Variables from config are available now.
 }

Вы можете использовать директиву auto_prepend_file для предварительного анализа файла. Добавьте директиву в свою конфигурацию и укажите ее на файл в своем пути включения. В этот файл добавьте свои константы, глобальные переменные, функции или что угодно.

Итак, если ваш предварительный файл содержит:

<?php
define('FOO', 'badger');

В другом файле Php вы можете получить доступ к константе:

echo 'this is my '. FOO;

Вы можете подумать об использовании фреймворка для достижения этой цели. Еще лучше вы можете использовать

Include 'functions.php';
require('functions');

ООП - еще одна альтернатива

Сеансы будут вашим лучшим выбором, если данные специфичны для пользователя, иначе просто используйте файл conifg. config.php:

<?php
$EL = "\n<br />\n";
?>

Затем на каждой странице добавьте

require 'config.php'

то вы сможете получить доступ к $ EL на этой странице.

Вы используете PHP5? Если вы определяете функцию __autoload () и используете класс с некоторыми константами, вы можете вызывать их там, где они вам нужны. Единственное, что здесь раздражает, это то, что вам нужно набрать что-то немного длиннее, например

MyClass::MY_CONST

Преимущество в том, что если вы когда-нибудь решите изменить способ обработки новых строк, вам нужно будет изменить его только в одном месте.

Конечно, возможный минус заключается в том, что вы вызываете, включая дополнительную функцию (__autoload ()), запускающую эту функцию (когда вы ссылаетесь на класс), которая затем загружает другой файл (ваш файл класса). Это может быть больше накладных расходов, чем оно того стоит.

Если я могу предложить предложение, можно было бы избежать такого рода эхо, для которого требуются эхо-теги (например, <br /> ). Если бы вы могли настроить что-то более похожее на шаблон, вы могли бы обрабатывать nl без необходимости явно вводить их. Так что вместо

echo "Blah Blah Blah\n<br />\n";

пытаться:

<?php
if($condition) {
?>
<p>Blah blah blah
<br />
</p>
<?php
}
?>

Мне просто кажется, что вызов классов или включение переменных в функции, а также out - это большая работа, которую не нужно выполнять, и, если это вообще возможно, таких ситуаций лучше избегать.

Похоже на постоянную работу. См. Функцию define () .

IIRC обычным решением является простой файл, содержащий ваши объявления, которые вы включаете в каждый исходный файл, что-то вроде ' constants.inc.php '. Там вы можете определить набор переменных всего приложения, которые затем импортируются в каждый файл.

Тем не менее, вы должны предоставить директиву include в каждый отдельный исходный файл, который вы используете. Я даже видел несколько проектов, в которых использовалась эта техника для локализации на несколько языков. Я бы предпочел метод gettext, но, возможно, этот вариант удобнее для обычного пользователя.

edit Для вашей проблемы я рекомендую использовать $ GLOBALS [] , подробности см. в Примере №2 .

Если это все еще не применимо, я бы попытался раскопать объекты PHP5 и создать статический синглтон, который предоставляет необходимые статические константы ( http://www.developer.com/lang/php/article.php/3345121 )

Другой вариант - использовать объект с общедоступными статическими свойствами. Раньше я использовал $ GLOBALS, но большинство редакторов не заполняют $ GLOBALS автоматически. Кроме того, неустановленные классы доступны повсюду (потому что вы можете инсталлировать везде, не сообщая PHP, что собираетесь использовать этот класс). Пример:

<?php

class SITE {
    public static $el;
}

SITE::$el = "\n<br />\n";

function Test() {
    echo SITE::$el;
}

Test();

?>

Это выведет <br />

С этим также легче справиться, чем с костантами, поскольку вы можете поместить в свойство любой тип значения (массив, строка, int и т. Д.), Тогда как константы не могут содержать массивы.

Это было предложено мне пользователем на форумах PhpEd .

svec, используйте фреймворк PHP. Просто любые - их там много. Это правильный способ сделать это. Благодаря фреймворку у вас есть единая точка входа для вашего приложения, поэтому определять переменные для всего сайта легко и естественно. Также вам не нужно заботиться о включении файлов заголовков или проверке, вошел ли пользователь в систему на каждой странице - достойный фреймворк сделает это за вас.

Видеть:

Потратьте время на изучение одного из них, и он очень скоро окупится.

Сделайте это, define ('el','\n\<\br/>\n'); сохраните его как el.php

затем вы можете включить любые файлы, которые хотите использовать, т.е.

echo "что-то" .el; // обратите внимание, я просто добавляю el в конце строки или впереди

Надеюсь на эту помощь

ПРИМЕЧАНИЕ, пожалуйста, удалите '\' после <br, так как мне пришлось вставить его, иначе в ответе не будет отображаться тег br ...