Как настроить переменные для всего сайта в php?
Я хочу определить что-то подобное в php :
$EL = "\n<br />\n";
а затем использовать эту переменную в качестве маркера "конечной строки" на всем моем сайте, например:
echo "Blah blah blah{$EL}";
Как мне определить $ EL один раз (только в 1 файле), включить его на каждую страницу моего сайта и не ссылаться на него, используя (как ни странно) global $EL;
оператор в каждой функции страницы?
Ответов (11)11
У большинства сайтов PHP должен быть файл (я называю его заголовком), который вы включаете на каждую страницу сайта. Если вы поместите эту первую строку кода в файл заголовка, затем включите ее следующим образом на каждую страницу:
include 'header.php';
вам не придется использовать ключевое слово global или что-то еще, вторая строка кода, которую вы написали, должна работать.
Изменить: Ой, извините, это не будет работать внутри функций ... теперь я вижу вашу проблему.
Изменить № 2: Хорошо, примите мой первоначальный совет с заголовком, но используйте define (), а не переменную. Они работают внутри функций после включения.
Вы можете использовать директиву auto_prepend_file для предварительного анализа файла. Добавьте директиву в свою конфигурацию и укажите ее на файл в своем пути включения. В этот файл добавьте свои константы, глобальные переменные, функции или что угодно.
Итак, если ваш предварительный файл содержит:
<?php
define('FOO', 'badger');
В другом файле Php вы можете получить доступ к константе:
echo 'this is my '. FOO;
Вы используете 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 ...