概述
变量
php规定变量名称的前面必须加上美元符号($),而且不管是变量还是常量,标识符都是区别大小写的,这有别于php关键字。
php的变量名不能用数字开头,通常以大小写字母或下划线开头,不过也可以使用其它字符,比如汉字。
php中除了自定义的变量外,还有大量的预定义变量,比如$_SERVER/$_ENV/$_COOKIE/$_GET/$_POST/$_FILES/$php_errormsg/$_REQUEST/$_SESSION/$GLOBALS等。
定义变量时直接赋值即可,php中没有关键字用于定义变量:
$var = 3;
$var = true;
在php中,读取一个未赋值(未定义)的变量是合法的:
$a .= 'b';
var_dump($a);
// string(1) "b"
var_dump($b);
// NULL
在本例中,变量$a在未定义的情况下便与字符串'b'进行接连,结果是$a在被连接之前被解析为空字符串。未初始化的变量具有其类型的默认值 - 布尔类型的变量默认值是FALSE
,整形和浮点型变量默认值是零,字符串型变量默认值是空字符串,数组变量的默认值是空数组。
在php中,一般的变量都具有全局作用域,在函数外部定义一个变量时,这个变量不仅可以在所有的文件中使用,而且可以在导入的文件中使用,也就是说,变量没有文件作用域。
var_dump($x);
// NULL
$x = 4;
var_dump($x);
// int(4)
print_ok();
// ok
function print_ok()
{
echo "ok";
}
在函数内部的变量都属于局部变量,除非使用global进行声明:
$a = '1';
$b = '2';
function varSet()
{
global $b;
$a = '100';
// $a为局部变量
$b = '200';
// $b为全局变量
}
function varEcho()
{
global $a, $b;
echo $a, " ", $b;
// 1 200
}
varSet();
varEcho();
注意,global并不是只用于函数内部,如果一个文件被包含进一个函数,那么这个文件中也可能会用到global。
// 被包含文件 inc.php
<?PHP
namespace MyNS{
$x = 4;
$y = 5;
global $x, $y;
function getSite()
{
global $x, $y;
return "($x, $y)";
}
}
// 执行文件
<?php
namespace MyCode
{
function req() {
require "inc.php";
}
req();
$x = 40;
$y = 50;
echo MyNSgetSite();
// (40, 50)
}
也可以直接通过$GLOBALS[]数组访问全局变量
$a = '1';
$b = '2';
function varSet()
{
$GLOBALS['a'] = '100';
$GLOBALS['b'] = '200';
}
varSet();
echo $a, " ", $b;
// 100 200
global和$GLOBALS不仅可以用来访问全局变量,还可以用来向全局作用域添加变量。同时,全局变量不受命名空间管理,所有命名空间下的全局变量都可以通过$GLOBALS[]读写和增删。
function test(){
global $a;
$a = 3;
$GLOBALS['b'] = 4;
}
echo $a;
// 变量未定义
echo $b;
// 变量未定义
test();
echo $a;
// 输出3
echo $b;
// 输出4
// 被导入文件 inc.php
<?PHP
namespace MyNS{
$x = 4;
$y = 5;
function setDat()
{
unset($GLOBALS['x']);
$GLOBALS['z'] = 6;
}
}
// 执行文件
<?php
namespace MyCode
{
include "inc.php";
mynssetDat();
unset($y);
var_dump(isset($x));
// bool(false)
var_dump(isset($y));
// bool(false)
var_dump($z);
// int(6)
}
可变变量
定义变量时,变量名也可以来自另一个变量的值,例如:
$str = "name";
$$str = 3;
这时,$name的值为3。
$a = 'b';
$$a = 'c';
$$$a = 'd';
var_dump($c);
// string(1) "d"
在使用数组时,可变变量有时候需要一点特殊的处理
$a = 'vara';
$b = 'arr';
$arr = ['a', 'b'];
echo $$b[1];
// b
echo ${$b}[1];
// b
与第一个输出语句等效,花括号是可选的
echo ${$arr[1]};
// arr
这里的花括号是必须的
可见,为了清晰地定界变量名称的边界,有时候必须使用花括号,类似的情况还包括:属性位于数组中,或者属性名包含有多个部分或者属性名包含有非法字符时。另外,这里的花括号是不能用圆括号来代替的。
静态变量
在函数内部可以将局部变量定义成静态变量:
static $var = 3;
注意,静态变量的声明是在编译时进行解析的,所以静态变量只能用常量初始化(或常量表达式,如:1+2),不能使用变量或其他表达式:
define('NAME', 'Ann');
$age = 3;
function f1() {
return 2;
}
function fun()
{
global $age;
//static $var1 = f1();
// 出错
//static $var2 = $age;
// 出错
static $var3 = 4+3;
// 正确
static $var4 = NAME;
// 正确
}
引用赋值
引用赋值相当于给变量起一个别名,这样多个变量将代表一个相同的实体。
$a = 3;
$b = &$a;
$c = "a";
$d = &$$c;
注意,对于对象类型,不需要使用引用赋值语法,一般的赋值实际上就是实现为引用赋值,相反,如果不想进行引用赋值,得使用clone关键字。另外,new运算的结果也不能再使用&来得到一个引用,否则运算出错,因为new运算符是自动返回一个引用的。
超全局变量
这是一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,因此通常被称为自动全局变量或者超全局变量。
超全局变量是PHP内置的一类全局可用变量,在任何地方都可直接访问,甚至在函数中也无须global声明。
注意,超级全局变量不能被用作函数或类方法中的可变变量。
$GLOBALS - 一个数组,包含了全部可用的全局变量,变量名就是键名,在函数内部除了用global声明全局变量外,也可以通过本数组来访问
$_SERVER - 一个数组,包含由服务器提供的多种信息,诸如头信息、路径、脚本路径等
$_GET - HTTP的Get方法相关信息
$_POST - HTTP中Post方法相关信息
$_FILES - 文件上传相关信息
$_COOKIE - cookie相关信息
$_SESSION - session相关信息
$_REQUEST - 包含了cookie、get、post 相关信息
$_ENV - 系统环境变量
判定变量的几个函数
isset(),变量不是null时结果为true
unset(),清除变量的值,使之成为null
empty(),变量的值为空时返回true,如0、0.0、""、"0"、null、false、 var $var;(在类内声明但尚未设置值的变量)、空数组。
数据类型
php中的数据类型为弱类型(动态类型),数据在使用之前无须声明类型,而且变量的类型也可以在程序运行过程中动态改变。
类型包括以下9种:
整数、浮点数、布尔(true/false)、字符串、NULL(null)、资源、数组、对象、可调用
其中,整型值(integer),浮点数值(float),字符串值(string)和布尔值(boolean)是四种标量类型(标量值不能拆分为更小的单元,明显数组就不是标量)。数组和对象属于复合类型。注意,这两种类型也可以赋值给变量或者从函数返回。
浮点数并无float和double之分,两者都是指浮点类型。
gettype()函数可以得到参数的类型字符串
$a = 2;
$b = 5.6;
$c = "abc";
$d = true;
$e = null;
$f = array(2,3,4);
echo gettype($a),"n";
// integer
echo gettype($b),"n";
// double
echo gettype($c),"n";
// string
echo gettype($d),"n";
// boolean
echo gettype($e),"n";
// NULL
echo gettype($f),"n";
// array
凡是尚未设置值的变量、值被赋值为常数 NULL 的变量或值被 unset() 函数清除的变量均会被视为NULL。
资源类型代表的是一种特殊值,用来表示 php 程序的外部资源,例如数据库、文件、图形图像等,这种类型通常是在调用函数存取外部资源时自动建立的(即由相关函数返回一个资源值)。
一般来说,我们并不需要手动释放资源,PHP Zend Engine 会自动管理除了数据库之外的所有资源,当某一个资源不再使用时,只需要将表示该资源的变量设为NULL即可。
类型判断
php中提供了大量的函数用于判定变量类型,这些函数都返回一个布尔值:
is_int()/is_integer()/is_long()
is_float()/is_double()/is_real()
is_bool()
is_string()
is_null()
is_resource()
is_array()
is_object()
is_numeric()(是否为数字或数字字符串)
is_scalar()(是否为标量,标量指的是整数、浮点数、布尔值或字符串,其他的像数组、对象等则不是标量)
最后
以上就是喜悦宝贝为你收集整理的php中的类型和变量变量可变变量静态变量引用赋值超全局变量判定变量的几个函数数据类型类型判断的全部内容,希望文章能够帮你解决php中的类型和变量变量可变变量静态变量引用赋值超全局变量判定变量的几个函数数据类型类型判断所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复