Как настроить переменные для всего сайта в php?
-
08-06-2019 - |
Вопрос
Я хочу определить что-то подобное в php:
$EL = "\n<br />\n";
а затем используйте эту переменную в качестве маркера "конечной строки" по всему моему сайту, вот так:
echo "Blah blah blah{$EL}";
Как мне определить $ EL один раз (только в 1 файле), включить его на каждую страницу моего сайта и нет приходится ссылаться на него, используя (как ни странно, в обратном направлении) global $EL;
оператор в каждой функции страницы?
Решение
Большинство сайтов на PHP должны иметь файл (я называю его заголовком), который вы включаете на каждую отдельную страницу сайта.Если вы поместите эту первую строку кода в заголовочный файл, то включите ее следующим образом на каждую страницу:
include 'header.php';
вам не нужно будет использовать ключевое слово global или что-то еще, вторая строка кода, которую вы написали, должна сработать.
Редактировать:О, извините, это не будет работать внутри функций...теперь я понимаю вашу проблему.
Правка №2:Хорошо, примите мой первоначальный совет с заголовком, но используйте определить() скорее, чем переменная.Они работают внутри функций после включения.
Другие советы
Звучит как постоянная работа.Посмотрите на функцию определить().
Вы используете 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
}
?>
Мне просто кажется, что вызов классов или включение переменных как внутри функций, так и вне их - это большая работа, которую не нужно выполнять, и, если это вообще возможно, подобных ситуаций лучше избегать.
Сделай это
define ('el','\n\<\br/>\n');
сохраните его как el.php
затем вы можете включить любые файлы, которые хотите использовать, т.е.
эхо "чего-то".el;// обратите внимание, что я просто добавляю el в конце строки или спереди
Надеюсь, это поможет
ПРИМЕЧАНИЕ, пожалуйста, удалите символ "\" после < br так как мне пришлось вставить это, иначе в ответе не будет отображаться тег br...
@svec да, это сработает, вам просто нужно также включить файл внутри функции.Именно так работает большинство моих программ.
function myFunc()
{
require 'config.php';
//Variables from config are available now.
}
Другой вариант - использовать объект с общедоступными статическими свойствами.Раньше я использовал $ GLOBALS, но большинство редакторов не заполняют $ GLOBALS автоматически.Кроме того, классы без создания экземпляра доступны везде (потому что вы можете создавать экземпляры везде, не сообщая PHP, что собираетесь использовать класс).Пример:
<?php
class SITE {
public static $el;
}
SITE::$el = "\n<br />\n";
function Test() {
echo SITE::$el;
}
Test();
?>
Это приведет к <br />
С этим также легче иметь дело, чем с константами, поскольку вы можете поместить в свойство значение любого типа (array, string, int и т.д.), Тогда как константы не могут содержать массивов.
Это было предложено мне пользователем на PhpED форумы.
svec, используй PHP-фреймворк.Просто любой - их там предостаточно.Это правильный способ сделать это.С Framework у вас есть единая точка входа для вашего приложения, поэтому определение переменных для всего сайта является простым и естественным.Также вам не нужно заботиться о включении заголовочных файлов и проверять, авторизован ли пользователь на каждой странице - decent framework сделает это за вас.
Видишь:
Потратьте некоторое время на изучение одного из них, и это очень скоро окупится.
IIRC распространенным решением является обычный файл, содержащий ваши объявления, которые вы включаете в каждый исходный файл, что-то вроде 'constants.inc.php'.Там вы можете определить набор переменных для всего приложения, которые затем импортируются в каждый файл.
Тем не менее, вы должны предоставить директиву include в каждый единственный исходный файл, который вы используете.Я даже видел несколько проектов, использующих эту технику для обеспечения локализации для нескольких языков.Я бы предпочел способ gettext, но, возможно, с этим вариантом проще работать обычному пользователю.
Редактировать Для решения вашей проблемы я рекомендую использовать $ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ[], видеть Пример №2 за подробностями.
Если это все еще неприменимо, я бы попытался откопать объекты PHP5 и создать статический синглтон, который предоставляет необходимые статические константы (http://www.developer.com/lang/php/article.php/3345121)
Сеансы будут вашим лучшим выбором, если данные зависят от конкретного пользователя, в противном случае просто используйте файл conifg.config.php:
<?php
$EL = "\n<br />\n";
?>
Затем на каждой странице добавляйте
require 'config.php'
вы сможете получить доступ к $ EL на этой странице.