-What's PHP различие между глобальными переменными и константами

Согласно многим источникам, register_globals (глобальные переменные, который является) должен быть, отключает в Вашем php.ini. Должен я писать определить () в моем коде и использовать константы, если глобальные переменные отключены? Они даже связаны?

7
задан Gal 13 January 2010 в 20:11
поделиться

6 ответов

Распределенная реализация, такая как Hadoop, не является хорошей пригодностью для обработки 5 ГБ XML

  • Hadoop работает лучше всего на больших количествах данных. Хотя 5 ГБ - это довольно большой XML-файл, он может быть легко обработан на одной машине.
  • Входные файлы для рабочих мест Hadoop должны быть Splittable, так что разные части файла могут быть обработаны на разных машинах. Если ваш XML не имеет тривиально, расщепление файла будет не детерминированным, поэтому вам понадобится шаг предварительного обработки для форматирования файла для разделения.

Если у вас было много файлов 5 ГБ, то вы можете использовать Hadoop для распространения расщепления. Вы также можете использовать его для объединения результатов в файлах и хранить результаты в формате для быстрого запроса для использования вашего веб-интерфейса, поскольку упомянуто другие ответы.

-121--3595077-

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

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

16
ответ дан 6 December 2019 в 05:38
поделиться

Несколько вещей здесь.

Во-первых, register_globals, которые вы отключаете в своем php.ini, относятся к старой функции PHP, где любая переменная, отправленная через строку запроса (GET) или FORM (GET / POST), будет преобразована в глобальную переменную PHP. Это функциональность, которая (и должна быть) отключена при отключении register_globals. Даже с этим выкл, вы все равно можете определить глобальные переменные в вашем приложении.

В общем условиях программирования глобальные переменные (не регистрируются PHP Register_globals), считаются «плохими», потому что когда вы столкнулись с одним в качестве программиста, вы не имеете представлению, какие другие части приложения могут быть использованы или изменять его, или какого эффекта изменения в этом глобальном. Кроме того, если вы определяете новую глобальную переменную, есть вероятность, что вы собираетесь перезаписать существующую переменную, на которой кто-то еще опирается. Когда переменные определяются локально (в одной функции или на других языках один блок) вы можете изучить локальную область и обычно определить, какое изменение этой переменной будет делать.

Константы, с другой стороны, никогда не меняются. Вы определяете их один раз, и они остаются определенными, и никто не может их изменить. Вот почему глобальные константы считаются «менее плохими», чем глобальные переменные.

9
ответ дан 6 December 2019 в 05:38
поделиться

Константы, однажды определенные, не могут быть изменены.

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

2
ответ дан 6 December 2019 в 05:38
поделиться

Некоторые постоянные примеры:

<?php

// Certainly constant
define('MINUTES_PER_HOUR', 60);
define('DOZEN', 12);

// Constant, but specific to this application
define('GREETING', 'Dear %s');
define('TIMEOUT', 30);

// Configurable, but constant for this installation
define('DATABASE', 'mydb');
define('IMAGES_DIRECTORY', '/tmp/images');

// Not constant, or some other reason why can't be constant
$user = $_POST['userid'];
$days_of_week = array('Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su');

?>
1
ответ дан 6 December 2019 в 05:38
поделиться

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

-121--3595079-

Настоятельно рекомендую вам прочитать «Математику для программистов» Стива Йегге .

Если вы ищете книги, я рекомендую конкретную математику и Искусство компьютерного программирования .

Если вы хотите испытать некоторые проблемы, ознакомьтесь с Project Euler .

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

Давайте также не будем забывать знаменитую цитату:

Каковы бы ни были ваши трудности в математике, я могу заверить вас, что мои намного величий.- Альберт Эйнштейн

Моя цель - стать сертифицированным и опытным программистом Java к концу года.

Наконец, только способ стать хорошо опытным - это написать код, и его много.

-121--2443225-

Попробуйте выполнить этот простой тест:

fileA.php:

<?php
define('SOMEVAL', 2);
?>

fileB.php:

<?php
if(defined('SOMEVAL')) echo SOMEVAL;
else echo "SOMEVAL does not exists\n";
include 'fileA.php';
if(defined('SOMEVAL')) echo 'SOMEVAL='.SOMEVAL;
else echo "SOMEVAL does not exists\n";
?>

Затем запустите fileB.php, и вы увидите, что прежде чем включить fileA.php, SOMEVAL не определен. Это значит, что прежде чем что-либо определить, он не будет виден сценарию.

-1
ответ дан 6 December 2019 в 05:38
поделиться

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

Константы не всегда глобальные (вы можете объявить константу в классе).

Кроме того, глобальные переменные могут быть любым типом: скаляр, массив или объект. Константы могут быть только скалярами.

Я не собираюсь говорить, либо константы, ни глотали не являются хорошими или плохими. При использовании соответствующим образом они оба имеют полезное использование. Существуют вопросы безопасности вокруг функции Register_globals , которые отдельно от более общего использования глобалей.

7
ответ дан 6 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: