美文网首页PHP入门系列
PHP入门系列(三)——变量&常量

PHP入门系列(三)——变量&常量

作者: RabbitMask | 来源:发表于2019-05-15 16:00 被阅读0次

    目录

    • 变量
    • 常量

    变量

    概念

    变量是用于存储信息的"容器",首先请明确,php是一种弱类型语言,PHP 会根据变量的值,自动把变量转换为正确的数据类型,这个我们在上一章节已经感受到了。

    #PHP的变量规则:
    变量以 $ 符号开始,后面跟着变量的名称
    变量名必须以字母或者下划线字符开始
    变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
    变量名不能包含空格
    变量名是区分大小写的($y 和 $Y 是两个不同的变量)
    

    作用域

    #PHP中有四种不同的变量作用域:
    local
    global
    static
    paramete
    

    在语言使用中,总会遇到调整作用域的情况,需要用到以下关键字调整:

    global

    在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。

    $a = 1;
    
    function demo()
    {
        global $a;
        echo $a;
    }
    demo();
    
    static

    当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。要做到这一点,请在您第一次声明变量时使用 static 关键字,即静态变量。

    function demo()
    {
        static $a = 0;
        echo $a;
        $a++;
    }
    demo();
    demo();
    demo();
    
    #输出
    012
    

    预定义变量

    从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,他们通常在全局范围内自动生效,不支持用户自定义添加,他们亦被称为超全局变量。

    #超全局变量
    $GLOBALS
    $_SERVER
    $_GET
    $_POST
    $_FILES
    $_COOKIE
    $_SESSION
    $_REQUEST
    $_ENV
    

    我们挑选几个具有代表性的来拓展下:

    $GLOBALS

    global关键字的替代方案,PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称,即变量的名字就是数组的键。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
    我们改写下global的例子:

    $a = 1;
    
    function demo()
    {
        echo $GLOBALS['a'];
    }
    demo();
    
    $_GET or $_POST
    echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
    echo'<br/>';
    echo 'this is your password:' . htmlspecialchars($_POST["password"]) . '!';
    
    #输出
    Hello rabbit!
    this is your password:123456!
    

    更多操作在后续表单章节拓展。

    可变变量

    一个变量的变量名可以动态的设置和使用,举个小栗子:

    $array=['rabbit','carrot','rbq'];
    $a=0;
    foreach ($array as $v){
        $$v=++$a;
    }
    
    echo $rabbit;
    echo $carrot;
    echo $rbq;
    
    #输出
    123
    

    $this

    官方手册中还提到$this 是一个特殊的变量,它不能被赋值。
    其实$this在OOP中就是伪变量,(伪变量不是真正的变量,只是形式上是变量,变量中存储的是固定的值,$this中并没有,哪个对象调用,$this就代表哪个对象。)
    同时,也可以将$this理解为对象的引用,$this通过引用的形式访问一个对象的方法和属性。
    在后续的OPP章节中我们进行拓展。


    常量

    我们对比性的提出常量的概念:

    • 常量前面没有美元符号($);
    • 常量只能用define()函数定义,而不能通过赋值语句;
    • 常量可以不用理会变量的作用域而在任何地方定义和访问;
    • 常量一旦定义就不能被重新定义或者取消定义;
    • 常量的值只能是标量。

    其中define()函数语法规则如下:

    bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
    name:必选参数,常量名称,即标志符。
    value:必选参数,常量的值。
    case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
    

    常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用,却不需要全局声明。

    define("rabbit", "This is rabbit");
    
    function demo() {
        echo rabbit;
    }
    demo()
    

    魔术常量

    PHP 向它运行的任何脚本提供了大量的预定义常量。
    不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
    有八个魔术常量它们的值随着它们在代码中的位置改变而改变,如下:

    __LINE__    文件中的当前行号。
    __FILE__    文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
    __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
    __FUNCTION__    函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    __CLASS__   类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
    __TRAIT__   Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
    __METHOD__  类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
    __NAMESPACE__   当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
    

    相关文章

      网友评论

        本文标题:PHP入门系列(三)——变量&常量

        本文链接:https://www.haomeiwen.com/subject/khppiqtx.html