php之变量和常量

PHP中的变量用一个美元符号后面跟变量来表示。变量名是区分大小写的。

变量与PHP中其它的标签一样遵循相同的规则。一个有效的变量名有字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。
按照正常的正则表达式,它将被表述为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Note: 在此所说的字母是 a-z,A-Z,以及 ASCII 字符从 127 到 255(0x7f-0xff)

Note: $this 是一个特殊的变量,它不能被赋值

可以这样对$this变量赋值
$name = 'this';
$$name = 'text'; // sets $this to 'text'

变量名;可以用中文

变量默认总是传值赋值。那也就是说,
当将一个表达式的值赋予一个变量时,
整个原始表达式的值被赋值到目标变量。这意味着,
例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,
将不会影响到另外一个变量。有关这种类型的赋值操作
PHP 也提供了另外一种方式给变量赋值:引用赋值。
这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。
改动新的变量将影响到原始变量,反之亦然

使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。

有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值

虽然在 PHP 中并不需要初始化变量,但对变量进行初始化是个好习惯。
未初始化的变量具有其类型的默认值 - 布尔类型的变量默认值是 FALSE,
整形和浮点型变量默认值是零,字符串型变量(例如用于 echo 中)默认值是空字符串以及数组变量的默认值是空数组。

预定义变量

PHP 提供了大量的预定义变量。
由于许多变量依赖于运行的服务器的版本和设置,及其它因素,
所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运行时并不生效。

Warning
PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。
这是 PHP 的一个主要变化。
让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。
例如,为了得到 DOCUMENT_ROOT 的值,将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,
又如,使用 $_GET['id'] 来代替 $id 从 URL http://www.example.com/test.php?id=3 中获取 id 值,
亦或使用 $_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。

Note: 可变变量
超级全局变量不能被用作函数或类方法中的可变变量。

Note:

尽管超全局变量和 HTTP_*_VARS 同时存在,但是它们并不是同一个变量,所以改变其中一个的值并不会对另一个产生影响。

如果某些 variables_order 中的变量没有设定,它们的对应的 PHP 预定义数组也是空的。

如果传入的变量包含.,PHP会把.转化为_
//INCORRECT
echo $_GET['chuck.norris'];

instead you must use:
//CORRECT
echo $_GET['chuck_norris'];

变量范围:

PHP 中全局变量在函数中使用时必须声明为 global

$a = 1;
$b = 2;

function Sum()
{
global $a, $b;

$b = $a + $b;

}

Sum();
echo $b;

$a = 1;
$b = 2;

function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Sum();
echo $b;

$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,
值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。

function test_global()
{
// 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。
global $HTTP_POST_VARS;

echo $HTTP_POST_VARS['name'];

// Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。
echo $_POST['name'];

}

使用静态变量

变量范围的另一个重要特性是静态变量(static variable)。
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

//静态变量与递归函数
function test()
{
static $count = 0;

$count++;
echo $count;
if ($count < 10) {
    test();
}
$count--;

}

Note:

静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。

静态声明是在编译时解析的

Note:

在函数之外使用 global 关键字不算错。可以用于在一个函数之内包含文件时。

来自 PHP 之外的变量

HTML 表单(GET 和 POST)
Note:
量名中的点和空格被转换成下划线。例如 变成了 $_REQUEST["a_b"]。

Note:

magic_quotes_gpc 配置指令影响到 Get,Post 和 Cookie 的值。如果打开,值 (It's "PHP!") 会自动转换成 (It's "PHP!")。
十多年前对数据库的插入需要如此转义,如今已经过时了,应该关闭。参见 addslashes(),stripslashes() 和 magic_quotes_sybase。

MAGE SUBMIT 变量名 ¶
当提交表单时,可以用一幅图像代替标准的提交按钮,用类似这样的标记:


当用户点击到图像中的某处时,相应的表单会被传送到服务器,并加上两个变量 sub_x 和 sub_y。它们包含了用户点击图像的坐标。
有经验的用户可能会注意到被浏览器发送的实际变量名包含的是一个点而不是下划线(即 sub.x 和 sub.y),但 PHP 自动将点转换成了下划线。

HTTP Cookies

PHP 透明地支持 » RFC 6265定义中的 HTTP cookies。
Cookies 是一种在远端浏览器端存储数据并能追踪或识别再次访问的用户的机制。
可以用 setcookie() 函数设定 cookies。
Cookies 是 HTTP 信息头中的一部分,
因此 SetCookie 函数必须在向浏览器发送任何输出之前调用。
对于 header() 函数也有同样的限制。Cookie 数据会在相应的 cookie 数据数组中可用,
例如 $_COOKIE,$HTTP_COOKIE_VARS 和 $_REQUEST。更多细节和例子见 setcookie() 手册页面。

如果要将多个值赋给一个 cookie 变量,必须将其赋成数组。例如:

setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
setcookie("MyCookie[bar]", 'Testing 2', time()+3600);

注意在浏览器中一个 cookie 会替换掉上一个同名的 cookie,
除非路径或者域不同。因此对于购物车程序可以保留一个计数器并一起传递,例如:

变量名中的点

通常,PHP 不会改变传递给脚本中的变量名。然而应该注意到点(句号)不是 PHP 变量名中的合法字符。

$varname.ext; /* 非法变量名 */

这时,解析器看到是一个名为 $varname 的变量,后面跟着一个字符串连接运算符,
后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)'ext'。很明显这不是想要的结果。
出于此原因,要注意 PHP 将会自动将变量名中的点替换成下划线

确定变量类型

因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,
例如:gettype(),is_array(),is_float(),is_int(),is_object() 和 is_string()。

常量

常量是一个简单值的标识符(名字)。如同其名称所暗示的,
在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。
常量默认为大小写敏感。传统上常量标识符总是大写的

和 superglobals 一样,常量的范围是全局的。不用管作用区域就可以在脚本的任何地方访问常量

define('MIN_VALUE', '0.0'); // RIGHT - Works OUTSIDE of a class definition.
//const MIN_VALUE = 0.0;RIGHT - Works both INSIDE and OUTSIDE of a class definition.

define('echo', 'My constant value');
echo constant('echo'); //输出成功

魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量。
不过很多常量都是由不同的扩展库定义的,
只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

几个 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 新增)。

转载于:https://www.cnblogs.com/2018-05-9-ygk/p/9376339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值