PHP Как предотвратить переопределение foreach внешних переменных - PullRequest
0 голосов
/ 03 декабря 2018

В настоящее время я пытаюсь очистить как можно больше кода веб-сайта компании, в которой я работаю, без полной переписки (например, удаление глупых комментариев, таких как // declare variables, очистка имен переменных, согласованность и т. Д.).Код представляет собой большой беспорядок и ужасен, использует много файлов, которые включаются, и переменные используются между файлами, что делает его действительно раздражающим.

Проблема в том, что простая вещь, поскольку переименование переменной на самом деле может сильно сломать,В настоящее время у меня есть следующая проблема:

В файле a У меня есть запрос, который выглядит примерно так:

$getProductSql = 'QUERY';
$getProduct = $db->prepare($getProductSql);
// some bind values etc.
$getProduct->execute();
$product = $getProduct->fetch(PDO::FETCH_ASSOC);

Теперь, после того, как этот файл включен в индекс, файл b будет включен, который содержит следующее:

$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

foreach ($getProducts->fetchAll(PDO::FETCH_ASSOC) as $product) {
    // some code
}

После включения этого файла будет включен файл c, который содержит следующее:

if ($product['COLUMN'] === '1')

В файле c, переменная $product из файла a должна использоваться, но из-за того, как наша структура и файл b включается между ними, $product из файла a заменяется последним значением $productиз цикла в файле b.

Есть ли способ решить эту проблему без , используя 2 разных имени переменной или движущийся код?

1 Ответ

0 голосов
/ 03 декабря 2018

Как говорит deceze: на самом деле нет ... но вы могли бы сделать это:

Оставить файл a как есть.

Изменить файл b следующим образом:

$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

$p[] = $product;

foreach ($getProducts->fetchAll(PDO::FETCH_ASSOC) as $product) {
    // some code
    $p[] = $product
}
$product = $p;

И файл c такой:

if ($product[0]['COLUMN'] === '1')

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

В качестве альтернативы: если вам больше не нужен массив product из файла b в файле c, вы также можете просто сделать это:

файл b:

$getProductsSql = 'QUERY';
$getProducts = $db->prepare($getProductsSql);
// some bind values etc.
$getProducts->execute();

$p = $product;

foreach ($getProducts->fetchAll(PDO::FETCH_ASSOC) as $product) {
    // some code
}
$product = $p;

В этом случае: нет необходимости изменять файл c

...