<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'language.variables.basics.php',
    1 => '基础',
    2 => '基础',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => '变量',
  ),
  'prev' => 
  array (
    0 => 'language.variables.php',
    1 => '变量',
  ),
  'next' => 
  array (
    0 => 'language.variables.predefined.php',
    1 => '预定义变量',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.basics" class="sect1">
   <h2 class="title">基础</h2>

   <p class="simpara">
    PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。
   </p>

   <p class="para">
    有效的变量名由字母（<code class="literal">A-Z</code>、<code class="literal">a-z</code> 或 128 到 255
    之间的字节）或者下划线开头，后面跟上任意数量的字母，数字，或者下划线。
    按照正常的正则表达式，它将被表述为：<code class="code">^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>。
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 不支持 Unicode 变量名，但是，某些字符编码（例如 UTF-8）会以这样的方式对字符进行编码，即多字节字符的所有字节都在允许的范围内，从而使其成为有效的变量名。
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     <code class="literal">$this</code> 是一个特殊的变量，它不能被赋值。PHP 7.1.0
     之前，间接赋值（例如通过使用<a href="language.variables.variable.php" class="link">可变变量</a>）是可能的。
    </span>
   </p></blockquote>
   
   <div class="tip"><strong class="tip">小技巧</strong><p class="simpara">请参见<a href="userlandnaming.php" class="xref">用户空间命名指南</a>。</p></div>
   
   <div class="example" id="example-1">
    <p><strong>示例 #1 有效变量名</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$var </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bob'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$Var </span><span style="color: #007700">= </span><span style="color: #DD0000">'Joe'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$var</span><span style="color: #DD0000">, </span><span style="color: #0000BB">$Var</span><span style="color: #DD0000">"</span><span style="color: #007700">;      </span><span style="color: #FF8000">// 输出 "Bob, Joe"<br /><br /></span><span style="color: #0000BB">$_4site </span><span style="color: #007700">= </span><span style="color: #DD0000">'not yet'</span><span style="color: #007700">;    </span><span style="color: #FF8000">// 合法变量名；以下划线开头<br /></span><span style="color: #0000BB">$i站点is </span><span style="color: #007700">= </span><span style="color: #DD0000">'mansikka'</span><span style="color: #007700">;  </span><span style="color: #FF8000">// 合法变量名；可以用中文<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-2">
    <p><strong>示例 #2 无效变量名</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">$</span><span style="color: #0000BB">4site </span><span style="color: #007700">= </span><span style="color: #DD0000">'not yet'</span><span style="color: #007700">;     </span><span style="color: #FF8000">// 非法变量名；以数字开头</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    PHP 接受任意字节序列作为变量名。不遵循上述命名规则的变量名只能在运行时动态访问。有关如何访问变量的信息，请参阅<a href="language.variables.variable.php" class="link">可变变量</a>。
   </p>

   <div class="example" id="example-3">
    <p><strong>示例 #3 访问模糊的变量名</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">${</span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">} = </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">;<br />echo ${</span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">}, </span><span style="color: #DD0000">" "</span><span style="color: #007700">, $</span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>以上示例会输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
bar bar
</pre></div>
    </div>
   </div>

   <p class="para">
    变量默认始终传值赋值。那也就是说，当表达式的值赋值给变量时，整个原始表达式的值被赋值到目标变量。这意味着，例如，当一个变量的值赋予另外一个变量时，改变其中一个变量的值，将不会影响到另外一个变量。有关这种类型的赋值操作，请参阅<a href="language.expressions.php" class="link">表达式</a>一章。
   </p>
   <p class="para">
    PHP 也提供了另外一种方式给变量赋值：<a href="language.references.php" class="link">引用赋值</a>。这意味着新的变量简单的引用（换言之，“成为其别名” 或者 “指向”）了原始变量。改动新的变量将影响到原始变量，反之亦然。
   </p>
   <p class="para">
    使用引用赋值，简单地将一个 &amp;
    符号加到将要赋值的变量前（源变量）。例如，下列代码片断将输出“My name is Bob”两次：
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bob'</span><span style="color: #007700">;              </span><span style="color: #FF8000">// 将 'Bob' 赋给 $foo<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;              </span><span style="color: #FF8000">// 通过 $bar 引用 $foo<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">"My name is </span><span style="color: #0000BB">$bar</span><span style="color: #DD0000">"</span><span style="color: #007700">;  </span><span style="color: #FF8000">// 修改 $bar 变量<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;                 </span><span style="color: #FF8000">// $foo 的值也被修改<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="para">
    有一点重要事项必须指出，那就是只有变量才可以引用赋值。
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">25</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;      </span><span style="color: #FF8000">// 合法的赋值<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;(</span><span style="color: #0000BB">24 </span><span style="color: #007700">* </span><span style="color: #0000BB">7</span><span style="color: #007700">);  </span><span style="color: #FF8000">// 非法; 引用没有名字的表达式<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />   return </span><span style="color: #0000BB">25</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">test</span><span style="color: #007700">();    </span><span style="color: #FF8000">// 无效，因为 test() 没有通过引用返回变量。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    在 PHP 中声明变量不是必需的，但这是一种非常好的做法。访问未定义的变量将导致 <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>（在
    PHP 8.0.0 之前，为 <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>）。未定义的变量的默认值为 <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>。<span class="function"><a href="function.isset.php" class="function">isset()</a></span>
    语言结构可用于检测变量是否已初始化。
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>示例 #4 未初始化变量的默认值</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 未设置和未引用（不使用上下文）的变量。<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$unset_var</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>以上示例会输出：</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Warning: Undefined variable $unset_var in ...
NULL
</pre></div>
     </div>
    </div>
   </p>

   <p class="simpara">
    PHP 允许从未定义的变量自动生成数组（自动创建新数组）。
    将元素追加到未定义的变量将创建一个新数组，并且不会生成警告。
   </p>
   <div class="example" id="example-5">
    <p><strong>示例 #5 未定义变量自动生成数组</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$unset_array</span><span style="color: #007700">[] = </span><span style="color: #DD0000">'value'</span><span style="color: #007700">; </span><span style="color: #FF8000">// 不会生成警告。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     当将一个文件包含在另一个使用相同变量名的文件中时，依赖未初始化变量的默认值是有问题的。
    </p>
   </div>

   <p class="simpara">
    可以使用 <span class="function"><a href="function.unset.php" class="function">unset()</a></span> 语言结构来销毁变量。
   </p>

   <p class="simpara">
    有关变量相关函数的信息，请参阅<a href="ref.var.php" class="link">变量函数参考</a>。
   </p>
  </div><?php manual_footer($setup); ?>