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

StackOverflow https://stackoverflow.com/questions/13000

  •  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 на этой странице.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top