php变量
命名规则
- 必须以
$
符号开始; - 有字母,数字和下划线组成;
- 变量严格区分大小写;
- 不能与数字开头;
- 命名应该有实际的意义;
- 命名方法可以采用驼峰法(
$userName
)或者下划线法($user_name
); - 可以使用中文来命名变量,但极不推荐使用。
php是一种弱类型语言,也就是说不需要像Java一样在命名变量是要使用 int, float等等来规定变量类型。
可使用var_dump($username)
来查看变量类型。使用unset($username)
来删除变量,删除后不能再次使用。
变量的生命周期
- 从定义变量,到人为删除变量的周期;
- 从定义变量,中途为删除变量,知道脚本执行结束。
预定义变量
系统中为了方便程序员开发,将很多需要用户很麻烦操作的变量制作成了系统变量,用户可以直接调用就能获取响应的数据结果,预定义变量通常都是数组数据,且命名通常都是大写。
-
GET:用户通过get方式提交的数据−
G
E
T
:
用
户
通
过
g
e
t
方
式
提
交
的
数
据
−
_POST:用户通过post方式提交的数据
-
REQUEST:用户通过get和post提交的数据−
R
E
Q
U
E
S
T
:
用
户
通
过
g
e
t
和
p
o
s
t
提
交
的
数
据
−
_SERVER:用户和服务器的基本信息数据
-
FIle:用户提交的文件信息−
F
I
l
e
:
用
户
提
交
的
文
件
信
息
−
_SESSION:session数据
-
COOKIE:cookie数据−
C
O
O
K
I
E
:
c
o
o
k
i
e
数
据
−
GLOBALS:所有全局变量,也是唯一一个不是以下划线开始的预定义变量
- $_ENV:环境数据
变量传值
- 值传递:将变量的值赋值给另外一个变量,两个变量拥有相同的值,但是两个变量互不影响。
$a = 10;
$b = $a; // 值传递
- 引用传递:将变量所指向的数据的内存地址赋值给另外一个变量,两个变量指向同一个值,任何一个改变都会影响另外一个变量。
$a = 10;
$c = &$a; // 取a变量保存的内存地址,交给c变量存储,两个变量存储同一个内存地址。
变量内存分析(栈、堆、数据段、代码段)
- 栈:效率高,但是少,主要存放变量名字和变量索引(指向数据的内存地址)
- 堆:效率低,但是大,其内存连续,主要存储大数据(对象,数组等)
- 数据段:效率比堆高,比栈低,主要存储普通数据
- 代码段:将要运行的代码加载到内存中,然后开始执行代码
- 变量内存机制:变量在定义的过程中,在栈区有一块索引表(PHP自动申请),然后将变量名字存储到表中,然后变量的值存储在数据段中,并将数据的地址存到索引表中对应变量名的后面。也就是说,变量并不是保存数据,而是保存数据所在的内存地址。访问变量时,就是通过变量名找到数据地址,然后取出数据。
php常量
命名规则
- 常量名通常用大写字母表示;
- 不需要使用
$
符号开始; - 有字母,数字和下划线组成;
- 复杂的常量名使用下划线法表示:
FAMILY_NAME
;
常量定义
常量的定义通常使用define
函数或者const
关键字,而且必须在定义的时候就对其赋值。
// 有效常量名
define('PI', 3.1415926);
const FAMILY_NAME = 'UESTC';
define('-_-'. 'smile'); // 宽松方式,不建议使用
// 错误变量名
define('3PI'. 3.1415926); // 数字开头,错误。
const 3PI = 3.14;
常量使用
常量的使用可以通过直接定义的常量名来使用,但有些以符号定义的常量名-不能以普通方式访问,通常以
constant('-_-'); // 访问常量
系统常量
- PHP_VERSION:php的版本号
- PHP_INT_SIZE:php中int数据所占用的字节数
- PHP_INT_MAX:php中int所能存储的最大数
魔术常量
系统中有一些东西是在变化的,但是又是不允许随意变化,是有规律变化的
- __DIR__
:当前文件所在路径(绝对路径)
- __FILE__
:当前文件所在路径(绝对路径,包含文件名)
- __FUNCTION__
:函数内部使用,表示函数的名字
- __CLASS__
:类内部使用,表示类名
- __NAMESPACE__
:命名空间内部使用,表示当前命名空间
- __METHOD__
:类内部方法里使用,表示当前方法名字
- __LINE__
:表示当前所在行数