变量
变量是用于储存信息的容器.
命名规则
- 变量必须以$开头,$符不是变量的一部分,仅表示后面的标识符是变量名;
- 除了$以名,以字母/下划线开头, 后面跟着数字/字母/下划线
- 变量名不能包含空格
- 变量名区分大小写
可变变量
变量名可变, 将变量名存储在另外一个变量中
$$
$user = 'ali';
$$user = 'haha'; //可变变量
- php变量的传递
变量的传递有值传递和地址传递(引用传递)
=
值传递
= &
地址传递
区别: 值传递是把A变量的“值”复制一份,再赋值给B变量。A,B两个变量没有任何关系。平时工作中80%多的写法都采用值传递。
引用传递是把A变量的值的空间地址给B变量,这时候A,B两个变量共用一个数据空间。A,B指向同一个地址。这时候两个变量是紧密连接在一起的,有关系。
$test1 = 'hello';
$test2 = $test1;
$test3 = &$test1;
printf("test1:%s, test2:%s, test3:%s", $test1,$test2,$test3); // 输出为test1:hello, test2:hello, test3:hello
echo "<hr>";
// test1更新值,
$test1 = 'world';
printf("test1:%s, test2:%s, test3:%s", $test1,$test2,$test3); // 输出为test1:world, test2:hello, test3:world
- 销毁变量
unset($变量),使用unset销毁的是变量名, 值还在
$test1 = 'hello';
$test3 =& $test1;
unset($test1);
printf("test1:%s, test3:%s",$test1,$test3); //输出为 test1:, test3:hello
变量的类型转换方式
php是弱类型语言,变量的类型随值的变化而变化.
php变量有8种变量类型:4标量类型(int, float, string, bool); 2复合类型(array, object); 2特殊类型(resource, null)- 强制类型转换
$num1='12';
var_dump($num1,(int)$num1,(float)$num1); //string(2) "12" int(12) float(12)
- 系统自动转换
当变量参与运算时,系统会自动转换, 如+ - * /
会把变量转化为数字运算..
会把变量转为字符参与运算.// 数值运算
$foo = '100pages';
@$foo += 200;
var_dump($foo);// int(300)
// 字符串拼接符
var_dump($foo);// int(300)
echo 'how are you' . 100 . '<br>';
- 布尔类型转换
0、空为假,非0非空为真if (!'0') : // 0为false
echo 'true'; //true
endif;
- 永久类型转换
使用settype函数.settype($p,'integer');
echo gettype($p);//integer
- 强制类型转换
变量的作用域
1、全局变量:在函数外面定义的变量.$GLOBALS
保存的是全局变量的所有的值
2、局部变量:在函数里面定义的变量,默认情况下,函数内部是不会去访问函数外部的变量,要在一个函数中访问一个全局变量,需要使用global
关键字。
3、超全局变量:是在全部作用域中始终可用的内置变量
$GLOBALS
: 引用全局作用域中可用的全部变量
$_SERVER
: 服务器和执行环境信息
$_GET
:通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
$_POST
:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
$_FILES
:通过 HTTP POST 方式上传到当前脚本的项目的数组
$_COOKIE
:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
$_SESSION
:当前脚本可用 SESSION 变量的数组
$_REQUEST
: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
$_ENV
: 通过环境方式传递给当前脚本的变量的数组
常量
常量是一个简单值的标识符(名字)。常量值被定义后,在脚本的其他任何地方都不能被改变。
注意:常量没有作用域的概念
命名规则
由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。常量的定义
- const关键字 字面量
const GENDER = '女';
- 用
define()
函数定义常量
define(常量名, 值, [是否区分大小写]) true不区分,默认false
2.1 常量名推荐使用全大写,多个单词之间用下划线_连接
2.2 定义常量可以使用特殊字符, 但是在调用时必须使用constant获取define('%%', 'tom');
echo constant('%%');
类的常量
类常量只能使用const定义php中魔术常量有哪些?
魔术常量它们的值随着它们在代码中的位置改变而改变
名称 | 说明 |
---|---|
LINE | 文件中的当前行号。 |
FILE | 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 |
DIR | 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。 |
FUNCTION | 当前函数的名称。匿名函数则为 {closure}。 |
CLASS | 当前类的名称。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。 |
TRAIT | Trait 的名字。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。 |
METHOD | 类的方法名。 |
NAMESPACE | 当前命名空间的名称。 |
ClassName::class | 完整的类名, |