当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
变量定义
PHP 中的变量用一个美元符号 $
后面跟变量名来表示
常见预定义变量
$GLOBALS
— 引用全局作用域中可用的全部变量$_SERVER
— 服务器和执行环境信息$_GET
— HTTP GET 变量$_POST
— HTTP POST 变量$_FILES
— HTTP 文件上传变量$_REQUEST
— HTTP Request 变量$_SESSION
— Session 变量$_ENV
— 环境变量$_COOKIE
— HTTP Cookies$php_errormsg
— 前一个错误信息$HTTP_RAW_POST_DATA
— 原生POST数据$http_response_header
— HTTP 响应头
以下预定义变量只在命令行执行的时候生效
$argc
— 传递给脚本的参数数目$argv
— 传递给脚本的参数数组
命名规范
变量名区分大小写,一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线
// 非法变量名;以数字开头
• $2set = '清清';
// 合法变量名;以下划线开头
• $_3set = '清清';
// 合法变量名;可以用中文
• $x姓名x = 'name';
创建cetest17.php
-
<?php
-
$var1 =
'小雨';
-
$var2 =
'小清';
-
// 输出 小雨,小清
-
echo
"$var1, $var2\n";
执行结果:
传值
变量默认总是传值赋值。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量
创建cetest18.php
-
<?php
-
-
$a =
'xiaoyu';
-
$b = $a;
-
$a =
'xiaoqing';
-
-
var_dump($a,$b);
可以看到输出结果,说明传值赋值,不会因为原变量改变二改变:
引用
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量相当于原变量的别名,改动新的变量将影响到原始变量,反之亦然。
只有有名字的变量才可以引用赋值。例如,&(1 * 2)
为非法形式
创建cetest20.php
-
<?php
-
-
$a =
'a';
-
$b = $$a;
-
$c = &$a;
-
$d = &$b;
-
-
$a =
'x';
-
-
var_dump($a,$b,$c,$d);
执行结果:
创建cetest19.php
用引用赋值,简单地将一个 & 符号加到将要赋值的变量前
-
<?php
-
-
$a =
'xiaoyu';
-
$b = &$a;
-
$a =
'xiaoqing';
-
-
var_dump($a,$b);
执行结果:
变量范围
变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件
例如,这里变量 $a 将会在包含文件 b.php 中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内:
-
<?php
-
$a =
1;
-
include
'b.php';
-
<?php
-
-
$name =
'小雨';
-
$name1 =
'小清';
-
-
function doname()
-
{
-
echo $name;
-
}
-
-
function doname1($name1)
-
{
-
echo $name1;
-
}
-
-
doname();
-
doname1($name1);
从返回结果中可以看出,函数要使用外部变量可以通过传参实现,此外还可以使用全局变量:
全局变量
通过传参实现了函数调用外部变量声明全局变量有两种方法:
第一种方法:
global函数中声明了全局变量 a和b 之后,对任一变量的所有引用都会指向其全局版本。对于一个函数能够声明的全局变量的最大个数,PHP 没有限制。
第二种方法:
用特殊的 PHP 自定义 $GLOBALS 数组
全局变量通常使用关键字 global
来声明
第一种方法:
创建cetest22.php
-
<?php
-
-
$a =
1;
-
$b =
2;
-
-
function sum()
-
{
-
// 在里面声明为全局变量
-
global $a, $b;
-
$b = $a + $b;
-
}
-
-
sum();
-
echo
"$b\n";
执行结果:
第二种方法:
创建cetest23.php
-
<?php
-
-
$a =
2;
-
$b =
7;
-
-
function sum()
-
{
-
$GLOBALS[
'b'] = $GLOBALS[
'a'] + $GLOBALS[
'b'];
-
}
-
-
sum();
-
echo
"$b\n";
执行结果:
我们来把刚刚遗留的通过全局变量传参来实现输出打印
创建cetest24.php
-
<?php
-
-
$name =
'小雨';
-
$name1 =
'小清';
-
-
function doname()
-
{
-
global $name;
-
echo
"$name\n";
-
}
-
-
function doname1($name1)
-
{
-
global $name1;
-
echo
"$name1\n";
-
}
-
-
doname();
-
doname1($name1);
静态变量
变量范围的另一个重要特性是静态变量。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
-
<?php
-
-
function test()
-
{
-
$a =
0;
-
echo $a;
-
$a++;
-
}
每次调用时都会将 a 的值设为 0 并输出 0。将变量加一的a的值设为0并输出0。将变量加一的a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。
要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:
-
换行符
-
-
unix系列用 \n
-
-
windows系列用 \r\n
-
-
mac用 \r
-
-
PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性
-
-
如:
-
-
<?php
-
echo PHP_EOL;
-
//windows平台相当于 echo "\r\n";
-
//unix\linux平台相当于 echo "\n";
-
//mac平台相当于 echo "\r";
创建cetest26.php
-
<?php
-
-
function test()
-
{
-
static $a =
0;
-
echo $a.PHP_EOL;
-
$a++;
-
}
-
-
test();
-
test();
执行结果:
可变变量
变量的变量名可以动态的设置和使用。
动态设置了一个变量 $小雨,通常多个 $
会依次从最后边开始解析,最后生成 $
前一个值为名称的变量
创建cetest26.php
-
<?php
-
-
$a =
'小雨';
-
$$a =
'小清';
-
-
var_dump($a,$$a);
执行结果:
创建cetest27.php
-
<?php
-
-
$a =
'b';
-
$b =
'c';
-
$c =
'd';
-
-
$$$$a =
'abc';
-
var_dump($d);
执行结果:
参考链接:https://www.shiyanlou.com/courses/23
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重