2024年最全php之变量笔记_在php中所有的变量以哪个符号开头(1),2024年最新揭秘

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • local(局部)
  • global(全局)
  • static(静态)

Local 和 Global 作用域:
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
下面的例子测试了带有局部和全局作用域的变量:

<?php
$x=5; // 全局作用域

function myTest() {
  $y=10; // 局部作用域
  echo "<p>测试函数内部的变量:</p>";
  echo "变量 x 是:$x";   //因为$x是在函数myTest外部声明的变量,所以$x只能在函数外访问到
  echo "<br/>";   //换行
  echo "变量 y 是:$y";   //因为$y是在函数myTest内部声明的变量,所以$y只能在函数内访问到
} 

myTest();   // 运行myTest函数

echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";   //因为$x是在函数myTest外部声明的变量,所以$x只能在函数外访问到
echo "<br/>";   //换行
echo "变量 y 是:$y";   //因为$y是在函数myTest内部声明的变量,所以$y只能在函数内访问到
?>

运行结果:

测试函数内部的变量:


Notice: Undefined variable: x in F:\xampp\htdocs\test\phptest.php on line 7
变量 x 是:
变量 y 是:10
测试函数之外的变量:

变量 x 是:5

Notice: Undefined variable: y in F:\xampp\htdocs\test\phptest.php on line 17
变量 y 是:

注:你可以在不同的函数中创建名称相同的局部变量,因为局部变量只能被在其中创建它的函数所识别

三、PHP global 关键词

  • global 关键词用于在函数内访问全局变量
    要做到这一点,请在(函数内部)变量前面使用 global 关键词:
<?php
$x=5;   //声明一个$x变量,给它赋值5
$y=10;   //声明一个$y变量,给它赋值10

function myTest() {   //创建一个myTest函数
  global $x,$y;   //使用global关键词,使函数内部可以使用$x与$y变量
  $y=$x+$y;   //计算$y=5+10,即最后$y=15
}

myTest();   //执行myTest函数
echo $y;   //输出15
?>

运行结果:

15

  • PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有创建的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量
    举例:
<?php
$x=5;   //声明一个变量x,赋值为5
$y=10;   //声明一个变量y,赋值为10

function myTest() {   //定义一个myTest函数
  $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];   //直接在函数内部使用全局变量,不需要再global关键词
  $GLOBALS['x']=8;   //在函数内部把全局变量$x重新赋值8(验证函数内部是否可以直接更新全局变量)
} 

myTest();   //执行myTest函数
echo $x;   //输出为8,表明更新成功,这里更新是在$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']之后更新的,所以当时的$x还是=5
echo "<br/>";   //换行
echo $y;   //输出为15
?>

运行结果:

8
15

四、PHP static 关键词

  • 通常,当函数完成/执行后,会删除所有变量与它的值。不过,有时我需要不删除某个局部变量,要完成这一点,请在您首次声明变量时使用 static 关键词:
    然后,每当函数被调用时,这个局部变量所存储的信息都是函数最后一次被调用时所包含的信息
<?php
$x=0;
echo $x."<br/>";   //输出变量值为0 注:变量换行可以使用echo $x."<br/>"或echo "<br/>"
$x++;   //在$x变量现有值的基础上+1
echo $x;   //输出变量值为$x=0+1.结果为1
echo "<br/>";
$x++;   //输出变量值$x=1+1,结果为2
echo $x."<br/>"."<br/>";

function myTest() {   //定义一个myTest函数
   static $y=1;   //使用static关键词
   echo $y;   //输出变量$y的值
   $y++;   //在变量$y现有值的基础上+1
}

myTest();   //执行第一次myTest函数,使用了static关键词,并为$y赋值1,所以输出$y的结果为1,之后执行$y++,因此$y=1+1,$y变为2,此时myTest函数运行结束,本该删除局部变量$y与其值,但因为使用了static关键词,所以不删除局部变量$y与其值,所以此时$y已经变成了2,也就是static $y=2啦
echo "<br/>";   //函数执行换行必须使用echo "<br/>",使用myTest()."<br/>"无法换行
myTest();   //执行第二次myTest函数,因为使用了static关键词,第一次函数执行后,static $y被赋值了2,所以输出$y的结果为2,之后执行$y++,此时$y已经变成了3
echo "<br/>";
myTest();   //执行第三次myTest函数,因为使用了static关键词,第二次函数执行后,static $y被赋值了3,所以输出$y的结果为3,之后执行$y++,此时$y已经变成了4
echo "<br/>";   
myTest();   //执行第四次myTest函数,因为使用了static关键词,第三次函数执行后,static $y被赋值了4,所以输出$y的结果为4,之后执行$y++,此时$y已经变成了5
echo "<br/>";
myTest();    //执行第五次myTest函数,因为使用了static关键词,第四次函数执行后,static $y被赋值了5,所以输出$y的结果为5,之后执行$y++,此时$y已经变成了6,但是下面没有myTest函数再运行了,所以也就显示到5,但此时的static $y=6,你再执行一次myTest,就会输出6,接下来的流程就和上面几次的函数执行一样啦~
echo "<br/>";
?>

运行结果:

0
1
2

1
2
3
4
5

  • 如果函数内的局部变量不使用static关键字,会是什么样呢?
<?php
function myTest() {   //定义一个myTest函数
   $y=1;   //不使用使用static关键词
   echo $y;   //输出变量$y的值
   $y++;   //在变量$y现有值的基础上+1
}

myTest();   //执行第一次函数,首先执行第三行代码,局部变量$y赋值1,之后输出$y=1,再加1,因为是局部变量,不进行$y更新,直接完成myTest函数,删除$y变量与其值(删除了$y也就相当于删除了值)
echo "<br/>";
myTest();   //执行第二次函数,首先执行第三行代码,因为第一次函数的执行完成后直接删除了局部变量$y和其值,所以重新声明并赋值1,之后输出$y=1,再加1,因为是局部变量,不进行$y更新,直接完成myTest函数,删除$y变量与其值(删除了$y也就相当于删除了值)

运行结果:

1
1

  • 代码测试段,看看全局变量是否可以使用static关键词:
<?php
//static $y=0; //在全局变量作用域使用static关键词
//$y=0; //在全局变量作用域不使用static关键词
#以上注释的两行代码每次测试二选一(选取一行取消注释)进行测试
function myTest() {   //定义一个myTest函数
   echo $GLOBALS['y'];   //这里输出全局变量$y
   $GLOBALS['y']++;   //这里把更新全局变量$y,使它+1,就是函数外面的全局变量$y+1,变成了一个新的数值
}

myTest();   //执行第一次函数,首先执行第六行代码,输出全局变量$y=0,再加1,因为使用的是$GLOBALS[],所以更新全局变量$y,此时$y=1
echo "<br/>";
myTest();   //执行第二次函数,首先执行第六行代码,因为第一次的函数执行,全局变量$y变成了1,所以输出全局变量$y=1,再加1,因为使用的是$GLOBALS[],所以更新全局变量$y,此时$y=2
echo "<br/>";
myTest();   //执行第三次函数,首先执行第六行代码,因为第二次的函数执行,全局变量$y变成了2,所以输出全局变量$y=2,再加1,因为使用的是$GLOBALS[],所以更新全局变量$y,此时$y=3
echo "<br/>";   
myTest();   //执行第四次函数,首先执行第六行代码,因为第三次的函数执行,全局变量$y变成了3,所以输出全局变量$y=3,再加1,因为使用的是$GLOBALS[],所以更新全局变量$y,此时$y=4
echo "<br/>";
myTest();   //执行第五次函数,首先执行第六行代码,因为第四次的函数执行,全局变量$y变成了4,所以输出全局变量$y=4,再加1,因为使用的是$GLOBALS[],所以更新全局变量$y,此时$y=5
echo "<br/>";

以上注释的两行代码先使用第二行代码,之后注释第一行代码,选用第三行代码,运行结果都是一样的,为什么呢?
因为,不管全局变量使没使用static关键词,函数里的 G L O B A L S [ ] 都会更新全局变量 GLOBALS[]都会更新全局变量 GLOBALS[]都会更新全局变量y,使函数外的全局变量 y 变成一个新值。 ( 也就是说虽然 m y T e s t 函数完成后会删除函数内部的的所有变量与其值,但是它的值已经被 y变成一个新值。(也就是说虽然myTest函数完成后会删除函数内部的的所有变量与其值,但是它的值已经被 y变成一个新值。(也就是说虽然myTest函数完成后会删除函数内部的的所有变量与其值,但是它的值已经被GLOBALS[]更新,一个新值已经赋给了全局变量$y,它又不会删除,就这样依次循环啦)

有人就要问了,为什么不在函数内使用全局变量 y ,请问,如果使用了全局变量 y,请问,如果使用了全局变量 y,请问,如果使用了全局变量y,不使用 G L O B A L S [ ] ,你在函数内可以获得全局变量吗!!!所以,虽然 s t a t i c 关键字可以在函数外 ( 在全局变量上使用 ) ,但最终的运行结果跟它是没有关系的 ( 因为函数里的 GLOBALS[],你在函数内可以获得全局变量吗!!! 所以,虽然static关键字可以在函数外(在全局变量上使用),但最终的运行结果跟它是没有关系的(因为函数里的 GLOBALS[],你在函数内可以获得全局变量吗!!!所以,虽然static关键字可以在函数外(在全局变量上使用),但最终的运行结果跟它是没有关系的(因为函数里的GLOBALS[]更新了全局变量$y,还要static有啥用…),所以全局变量使不使用static关键字,都无所谓

最后,结果就是:全局变量不要使用static关键字(个人理解),只对函数中的局部变量使用,因为局部变量不会自己更新变量值,函数运行后就会删除变量与其值!!!

注:笔记总结于 http://www.w3school.com.cn/php/php_variables.asp

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

的朋友。**
[外链图片转存中…(img-YNavlgxo-1715632157422)]
[外链图片转存中…(img-mlJZAZnN-1715632157423)]

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值