PHP学习笔记--有关php中的变量

PHP中的可变变量(更多请自行参考php手册):

  php中的可变变量说白了,就是拿一个变量的值解析成一个变量名,去读那个变量名的值。实例:

  

<?php
    $a = "China";  //变量a
    $b = "a";       //变量b
    $China = "I'm Chinese !"; //变量China
    $f = "b";  //变量f
    
    echo $a."<br />";  //输出 China
    echo $$a."<br />"; //输出 I'm Chinese  --这里像要当做可变变量解析,必须在前面多加一个$符号
    $a = "f";  //改变变量指向的名称(这里就是可变变量的应用)
    echo $$a."<br />"; //经过上面指向变量f后输出 b
    $a = "b"; //同上
    echo $$a."<br /><br />"; //输出 a
    
    echo $b."<br />"; //输出 a
    echo $$b."<br />"; //输出 b
    echo $$$b."<br /><br />"; //输出 a
    
    echo $f."<br />"; //输出 b
    echo $$f."<br />"; //输出 a
    echo $$$f."<br />"; //输出 b
    echo $$$$f."<br /><br />"; //输出 a
    
    $$a = "China"; //前面最后一个已经更改了变量为b所谓$$a=$b 也就是改变的$b的值
    echo $b."<br />"; //输出 China
    echo $$b; //输出 I'm Chinese
?>

注意:可变变量不能应用于$this和超全局变量 (php变量的作用域和其他高级编程语言有所不同。看代码)

<?php 
    $name = 'man'; 
    $$name = 'abc'; //如果事先没有man这个变量。就新建一个man变量。 然后把abc赋值过去
    $$$name = 'def';
    echo $man."<br />"; //输出abc
    echo $abc; //输出def
    
    echo "<br /> <hr />";
    function show()
    {
        global $name; //这里的global并不是设置为全局变量。而是引用
        echo $name."<br />";  //输出man
    }
    
    function showtwo()
    {
        //global $name;
        //echo $name."<br />";
        echo $GLOBALS['name']; //超全局变量数组
    }
    
    show(); 
    showtwo();
?>

变量函数:

<?php
        function b()
        {
            echo "这是B";    
        }
        function c($name = "China") //设默认值
         {
            echo "这是$name";
        }
        
        $a = 'b';
        $a(); //找值所在的函数
         $a = 'c';
        $a();
?>

可变变量的一个典型应用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
    
    <div>
        <form action="#" method="post">
            <label>name: </label>
            <input type="text" name="name" /><br />
            <label>pwd : </label>
            <input type="text" name="pwd" /><br />
            <label>tag : </label>
            <input type="text" name="tag" /><br />
            <input type="submit" value="提交" />
        </form>
    </div>
    <?php
    
        foreach($_POST as $key=>$value)
        {        
            //print_r($_POST);
            $$key = $value;
        }
        //extract($_POST); //从数组中将变量导入到当前的符号表 --自行查找php手册
        echo $name."<br />";
        echo $pwd."<br />";
        echo $tag."<br />";
    ?>
</body>
</html>

  补充:

  变量的特性。如果一个变量事先没有声明,那么如果你要对一个变量赋值,此时PHP在后台的一个操作就是,当你给这个未声明的变量进行赋值时,后台就已经帮你申明了这个变量了。 直接看例子:

<?php
class A
{
    public function show()
    {
        //记住这里的name 实现是没有声明的。
        echo (isset($this->name)?"true":"false")." -- "; 
        echo $this->name;
    }
}

$A = new A(); //实例化
//直接输出,是没有任何结果的. 因为没有这个变量 。。这里可以用isset判断为false
$A->show();  //输出 "fase -- "

//这里进行赋值,在赋值时,后台默认声明此变量
$A->name = "我有输出了。这个变量被声明了!"; 
echo "<br />";
$A->show(); //输出 "true -- 我有输出了。这个变量被声明了!"
?>

小结:看了上面的示例后,你们以后再看到别人封装的代码里,如果有那种没有声明变量就直接用的,不要感到奇怪。那是叫你自己去设置呢。你直接赋值用就行了。。。(PS: 其实本人一开始也感到迷糊,因为以前在搞.NET的在C#里是绝对不会允许这种情况发生的。强型语言用惯了。。。在看这种弱类型的语言,确实一开始不会很适应)