Intereting Posts
Есть ли хорошие учебники для Solr для noob? Код цикла для каждого файла в каталоге изменит весь код на объектно-ориентированный объем использования памяти больше или меньше? Как уловить фатальную ошибку: Максимальное время выполнения 30 секунд превышено в PHP Как получить количество дней и месяцев с определенных дней Есть ли способ отключить добавление свойств в класс из экземпляра класса? Избегайте общей папки laravel и открывайте непосредственно корень на веб-сервере SQL-запрос с похожим возвратом по-разному в php mysql_result () ожидает, что параметр 1 будет ресурсом, данный объект регулярное выражение, которое будет извлекать предложения из текстового файла Расширитель Codeigniter расширенный MY_Controller Заголовок агента пользователя – аббревиатура для хранения mysql Скрипт для работы с файлами PHP: ненадежные загрузки? mysqli_fetch_array, в то время как столбцы цикла Как расширить многоугольник на определенное расстояние в PHP / Mysql?

Временная переменная

У меня есть функция, которая извлекает некоторые данные из базы данных, форматирует ее как HTML, а затем сохраняет этот HTML в переменную $output . Проблема в том, что $output не может быть эхом на экране сейчас, только позже, после запуска других функций. Также эти данные должны быть получены на этом этапе, а не позднее.

Итак, как я могу назвать эту переменную $output в другой функции, после того, как начат вывод на экран?

Related of "Временная переменная"

Вы можете определить $output в главном скрипте и импортировать его в функцию:

 function output() { global $output; 

Это, вероятно, будет работать для вашей ситуации. Однако считается, что плохой практикой является использование глобального пространства переменных с такими вещами, и это справедливо. (Поверь мне, я делал это в течение многих лет . 🙂

Существуют и другие подходы, которые лучше подходят для долгосрочного качества кода и поддерживаемости.

Глобальный конфигурационный массив

Вы можете либо сохранить один глобальный массив для всех глобальных параметров. Сделайте это где-нибудь в своем главном скрипте:

 $config = array(); $config["output"] = "<html>.......</htmL>"; $config["user_language"] = "en"; ..... 

вы импортируете массив конфигурации в функцию следующим образом:

 function output() { global $config; echo $config["output"]; 

Образец реестра

если вы хотите сделать чтение, вы можете использовать что-то более продвинутое, как шаблон реестра. Показанный здесь фрагмент выглядит неплохим примером для реестра. У Zend Framework также есть класс для этого.

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

Контекст: Являются ли глобальные переменные в PHP плохой практикой?

приветствуем использование возвратов и параметры передачи: НЕ ИСПОЛЬЗУЙТЕ global , он разрушает инкапсуляцию, один из краеугольных камней объектно-ориентированного программирования, и может привести к невероятно тяжело поддерживать код.

 <?php function doSomethingInDb(){ $value = db_result(); //something from the database, this is psuedo code return $value } function displaySomethingFromDb($input){ echo($input); //or some other way of displaying } //calulate results $output = doSomethinginDb(); //do other stuff... //output the result when you need it... displaySomethingFromDb($output); 

Вы должны передать переменную через аргумент функции или определить ее как глобальную внутри функции.

 $output = '<p>macilaci</p>'; function doesathing($output) { echo $output; } 

ИЛИ

 function doesathing() { global $output; echo $output; } 

не помещайте данные в переменную внутри функции, которая ее извлекает.

 function retrieve(...) { ... fetch from db return $rv; } function other() {...} function still($data) { ... echo $data; } $output = retrieve(...); other(); still($output); 

Вместо того, чтобы просто помещать этот фрагмент в глобальную переменную, IMHO лучшим решением является использование системы шаблонов для создания элементов страницы.

NB Я не предлагаю, чтобы вы немедленно выбежали и начали загружать Smarty – хотя есть преимущества и недостатки для полного разделения логики и презентации, есть только преимущества в модульном подходе к вашему экрану.

C.

Поместите следующую строку в начале функции, которая определяет $output :

 global $output; 

Поместите ту же строку в начале любой функции, которая будет ее использовать.

(Это не будет работать или будет мешать другим переменным, если в глобальной области уже есть переменная с именем $output .)

Использовать сеанс

Например:

 session_start(); $query = '...........'; $result = mysql_query($query); $_SESSION['mysqlResult'] = $result; 

Теперь вы можете использовать его с любой страницы в любое время, просто называя это

 $myresult = $_SESSION['mysqlResult'];