目录
- 变量
- 常量
变量
概念
变量是用于存储信息的"容器",首先请明确,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 新增)。
网友评论