[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как лучше сделать?
Master812
Всем привет!

В скрипте есть несколько include для подключения нужных частей скрипта из отдельных файлов. В одном из таких файлов может быть переменная $data, если подходят условия, но если условия не подходят, то эта переменная не создаётся. Далее в другом подключаемом файле тоже есть переменная $data и тут она существует всегда. Синтаксис у неё такой

$data .= 'данные';


Обратите внимание на .= Данные соединяются с помощью точки перед равно, но проблема в том, что если в первом файле данные не подключаются, то из-за точки возникает некритическая ошибка Notice: Undefined variable: data

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

@$data .= 'данные';


Но есть и другой способ, например, можно поставить if

if (isset($data)) { $data .= 'данные'; }
else { $data = 'данные'; }


Какой вариант из этих двух лучше?

Слышал, что собачка замедляет скрипт в 16 раз. А конструкция if во сколько замедляет?
FatCat
Есть и третий способ: в первом файле чтобы создавалась всегда.

_____________
Бесплатному сыру в дырки не заглядывают...
sergeiss
Master812, во всех файлах пишешь

$data[] = "какие-то данные, специфичные для данного файла";


А там, где надо использовать эти данные, делаешь так:

$dataFinal = implode($data);


Далее используешь переменную $dataFinal и больше не паришься по этому поводу :) Это будет 4-й способ. При этом не важно, сколько вообще у тебя файлов будет заинклужено. Ну и на всякий случай, дабы избежать ошибок (если вообще ни один файл не будет подключен), можно так сделать:


$data[] = '';
$dataFinal = implode($data);


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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Michael
Цитата (Master812 @ 13.12.2018 - 21:09)
Какой вариант из этих двух лучше?

Оба не очень. Работать с глобальными переменными, раскиданными по разным скриптам, сечь последовательность вызовов. Архитектура - very bad.
Продумай что то другое.
Например заведи конфиги, которые можно мержить, вот как в yii:
$config = yii\helpers\ArrayHelper::merge(
require __DIR__ . '/../../common/config/main.php',
require __DIR__ . '/../../common/config/main-local.php',
require __DIR__ . '/../config/main.php',
require __DIR__ . '/../config/main-local.php'
);

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

_____________
There never was a struggle in the soul of a good man that was not hard
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.