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#里是绝对不会允许这种情况发生的。强型语言用惯了。。。在看这种弱类型的语言,确实一开始不会很适应)

你可能感兴趣的:(学习笔记)