Как настроить переменные всего сайта в php? - PullRequest
5 голосов
/ 16 августа 2008

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

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

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

echo "Blah blah blah{$EL}";

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

Ответы [ 9 ]

6 голосов
/ 16 августа 2008

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

 include 'header.php';

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

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

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

3 голосов
/ 16 августа 2008

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

1 голос
/ 13 декабря 2010

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

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

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

Надеюсь, что эта помощь

ПРИМЕЧАНИЕ, пожалуйста, удалите '\' после

1 голос
/ 16 августа 2008

Вы используете 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
}
?>

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

0 голосов
/ 10 сентября 2008

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

См:

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

0 голосов
/ 10 сентября 2008

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

<?php

class SITE {
    public static $el;
}

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

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

Test();

?>

Это выдаст <br />

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

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

0 голосов
/ 16 августа 2008

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

function myFunc()
 {
require 'config.php';
//Variables from config are available now.
 }
0 голосов
/ 16 августа 2008

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

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

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

require 'config.php'

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

0 голосов
/ 16 августа 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...