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

目录

  • 变量
  • 常量

变量

概念

变量是用于存储信息的"容器",首先请明确,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'
'; 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入门系列(三)——变量&常量)