-常量与变量-
PHP是一种动态网站开发的脚本语言,动态语言特点是交互性,会有数据的传递,而PHP作为“中间人”,需要进行数据的传递,传递的前提就是PHP能自己存储数据(临时存储)
1.2.1变量基本概念
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的。
1、 变量是用来存储数据的;
2、 变量是存在名字的;
3、 变量是通过名字来访问的:数据;
4、 变量是可以改变的:数据。
1.2.2变量的使用
PHP中的所有变量都必须使用“$”符号
1、 定义:在系统中增加对应的变量名字(内存)
2、 赋值:可以将数据赋值给变量名(可以在定义的同时完成)
3、 可以通过变量名访问存储的数据
4、 可以将变量从内存中删除
1.2.4变量命名规则
1、 在PHP中变量名字必须以“$”符号开始;
2、 名字由字母、数字和下划线“_”构成,但是不能以数字开头;
3、 在PHP中本身还允许中文变量(不建议)。
1.2.5预定义变量
预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义变量都是数组)
$_GET //:获取所有表单以get方式提交的数据
$_POST //:POST提交的数据都会保存在此
$_REQUEST //:GET和POST提交的都会保存
$GLOBALS //:PHP中所有的全局变量
$_SERVER //:服务器信息
$_SESSION //:session会话数据
$_COOKIE //:cookie会话数据
$_ENV //:环境信息
$_FILES //:用户上传的文件信息
1.2.6可变变量
可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值:在变量前面再多加一个$符号。
$a = ‘b’;
$b = ‘bb’;
$$=bb
1.2.7变量传值
将一个变量赋值给另外一个变量:变量传值
变量传值一共有两种方式:值传递,引用传递
值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量保存(两个变量没有关系)
引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值)
KaTeX parse error: Expected 'EOF', got '&' at position 7: 新变量 = &̲老变量;
在内存中,通常有以下几个分区
栈区:程序可以操作的内存部分(不存数据,运行程序代码),少但是快
代码段:存储程序的内存部分(不执行)
数据段:存储普通数据(全局区和静态区)
堆区:存储复杂数据,大但是效率低
代码实现:
1.2.8常量基本概念
常量与变量一样,都是用来保存数据的。
常量:const/constant,是一种在程序运行当中,不可改变的量(数据)
常量一旦定义,通常数据不可改变(用户级别)
常量定义形式
在PHP中常量有两种定义方式(5.3之后才有两种)
1、 使用定义常量的函数:define(‘常量名’,常量值);
2、 5.3之后才有的:const 常量名 = 值;
常量名字的命名规则
1、 常量不需要使用“$”符号,一旦使用系统就会认为是变量;
2、 常量的名字组成由字母、数字和下划线组成,不能以数字开头;
3、 常量的名字通常是以大写字母为主(与变量以示区别);
4、 常量命名的规则比变量要松散,可以使用一些特殊字符,该方式只能使用define定义;
注意细节:
1、 Define和const定义的常量是有区别:在于访问权限区别
2、 定义常量通常不区分大小写,但是可以区分,可以参照define函数的第三个参数
1.2.9常量使用形式
常量的使用与变量一样:不可改变值(在定义的时候必须赋值)
有的时候还需要使用另外一种形式来访问(针对的是特殊名字的常量),需要用到另外一个访问常量的函数:
constant(‘常量名’)
说明:常量和变量的使用
1、 凡是数据会可能变化的,那么肯定是用变量
2、 数据不一定会变的,可以使用常量或者变量(变量居多)
3、 数据不允许被修改的,一定用常量
1.2.10系统常量
系统常量:系统帮助用户定义的常量,用户可以直接使用
常用的几个系统常量
PHP_VERSION:PHP版本号
PHP_INT_SIZE:整形大小
PHP_INT_MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)
PHP_INT_MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)
在PHP中还有一些特殊的常量,他们有双下划线开始+长两名+双下划线结束,这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,但是用户改变不了
__DIR__:当前被执行的脚本所在电脑的绝对路径
__FILE__:当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)
__LINE__:当前所属的行数
__NAMESPACE__:当前所属的命名空间
__CLASS__:当前所属的类
__METHOD__:当前所属的方法