﻿
<h1 class=p1>Область видимости переменных</h1>
<br>
<br>
<p class=text>Переменные в функциях имеют локальную область видимости. Это означает, что если даже локальная и внешняя переменные имеют одинаковые имена, то изменение локальной переменной никак не повлияет на внешнюю переменную:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <em class=gr>function</em> <b>get_sum</b><em class=gr>()</em>
  <em class=gr>{</em>
    <b>$var</b><em class=gr> = </em>5<em class=gr>;</em><em class=comnt> // локальная переменная</em>
    <em class=gr>echo</em> <b>$var</b><em class=gr>;</em>
  <em class=gr>}</em>
  <b>$var</b><em class=gr> = </em>10<em class=gr>;</em><em class=comnt> // глобальная переменная </em>
  <b>get_sum</b><em class=gr>();</em><em class=comnt> // выводит 5 (локальная переменная)</em>
  <em class=gr>echo(</em>&quot;&lt;br&gt;<b>$var</b>&quot;<em class=gr>);</em><em class=comnt> // выводит 10 (глобальная переменная)</em>
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=text>Локальную переменную можно сделать глобальной, если перед ее именем указать ключевое слово <b>global</b>. Если внешняя переменная объявлена как <b>global</b>, то к ней возможен доступ из любой функции:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
<em class=gr>function</em> <b>get_sum</b><em class=gr>()</em>
  <em class=gr>{</em>
    <em class=gr>global</em> <b>$var</b><em class=gr>;</em>
    <b>$var</b><em class=gr> = </em>5<em class=gr>;</em><em class=comnt> // изменяем глобальную переменную</em>
    <em class=gr>echo</em> <b>$var</b><em class=gr>;</em>
  <em class=gr>}</em>
  <b>$var</b><em class=gr> = </em>10<em class=gr>;</em>
  <em class=gr>echo(</em>&quot;<b>$var</b>&lt;br&gt;&quot;<em class=gr>);</em><em class=comnt> // выводит 10</em>
  <b>get_sum</b><em class=gr>();</em><em class=comnt> // выводит 5 (глобальная переменная изменена)</em>
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=text>Доступ к глобальным переменным можно получить также через ассоциативный массив <b>$GLOBALS</b>: </p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <em class=gr>function</em> <b>get_sum</b><em class=gr>()</em>
  <em class=gr>{</em>
    <b>$GLOBALS</b>[&quot;var&quot;]<em class=gr> = </em>20<em class=gr>;</em><em class=comnt> // изменяем глобальную переменную $var</em>
    <em class=gr>echo(</em><b>$GLOBALS</b>[&quot;var&quot;]<em class=gr>);</em>
  <em class=gr>}</em>
  <b>$var</b><em class=gr> = </em>10<em class=gr>;</em>
  <em class=gr>echo(</em>&quot;<b>$var</b>&lt;br&gt;&quot;<em class=gr>);</em><em class=comnt> // выводит 10</em>
  <b>get_sum</b><em class=gr>();</em><em class=comnt> // выводит 20 (глобальная переменная изменена)</em>
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=text>Массив <b>$GLOBALS</b> доступен в области видимости любой функции и содержит все глобальные перемене, которые используются в программе.</p>