PHP:变量的类型转换方式,变量值传递与值引用的区别,变量作用域,魔术常量

一.变量/常量命名

①变量命名

  • 仅允许使用: 英文字母(a-z,A-Z),数字(0-9),下划线(\_)或他们的组合
  • 不允许使用数字开头
  • 必须使用”$“美元符为前缀
  • 严格区分大小写
  • 驼峰命名法

②常量命名

  • define(): 函数
  • const: 关键字作为前缀
  • 通常,常量都用大写字母表示

二.变量的类型转换方式

转换方式函数
临时转换(int),(string),(array),(object)…
自动转换根据操作符对操作数的类型要求进行
强制转换settype()

①临时转换

大家可以看到$str没有转换之前是string 字符串类型,下面我们用(int)临时转换为数值型

大家可以看到现在进行类型转换之后$str变成了int数值型,和$int一模一样的类型值,但是这种类型转换不是永久的!而是临时的!

②自动转换:自动转换也就是让浏览器自己去解析转换

类型没有转换之前是字符串 15岁

用@符号抑制报错浏览器将会自动转换类型,类型转换之后15岁变成65,自动和数值类型相加,舍去了后面的字符串文字

③强制转换:settype()

$arr 没有转换类型之前是一个数组Array

强制类型转换为string,输出的类型就是字符串string

代码块

  1. <?php
  2. //定义全局变量
  3. $str = '15';
  4. $int = 30;
  5. //使用(int) 临时把字符串转换为数值
  6. echo (int)$str + $int .'<br>';
  7. var_dump((int)$str,$int);
  8. echo "<hr>";
  9. //自动转换类型
  10. $age = "15岁";
  11. //@符 强制解除报错,会让浏览器自动解析
  12. @$age += 50;
  13. echo $age;
  14. echo "<hr>";
  15. //settype()强制类型转换,把一个数组类型转换为string类型
  16. $arr = ['1','2','3'];
  17. settype($arr,'string');
  18. echo gettype($arr);
  19. ?>

三.变量值传递与值引用的区别

①变量值传递

变量a等于50 变量b等于变量a,输出变量b也等于50,这叫变量值传递,我们再看看更改变量a的值,变量b会不会改变属性

我们可以看到,变量a的值改变成100,变量b的值没有变化还是50,变量值传递等于每个人都有相同的值,重新更改赋值变量并不能改变被赋值本身的值,如果在下面在输出一个 变量b等于a呢?

我们可以看到,如果在下面在输出一个 变量b等于a,则变量b等于变量a最新的那个值,也就是说浏览器是从上到下开始解析的,这一点非常重要

②变量引用值传递

变量值引用,用一个&符号放在要引用的变量前面,接下来我们改变一下$c的值,看看$a会不会受影响

大家可以看到,我们在这里改变了$c的值,$a的值也会收到影响,说明变量值传递和变量值引用是不一样的!

③empty()和isset()

方法含义
isset()用来检测变量是否被定义,若变量存在并且值不为null才返回true 否则返回false
empty()检验变量是否为空,为空返回true 不为空 返回false
  • empty()

    变量有值不为空,返回false

变量没有值返回true

  • isset()

    变量值不存在返回false

变量值存在返回true

代码块

  1. <?php
  2. //值变量传递
  3. //变量a等于50 变量b等于变量a
  4. $a = 50 ;
  5. $b = $a ;
  6. $a = 100 ;
  7. $b = $a ;
  8. echo $b;
  9. echo '<hr>';
  10. //变量值引用 用&符号
  11. $c = 50;
  12. $a = &$c;
  13. //改变一下$c的值
  14. $c = 100;
  15. echo $a ;
  16. echo "<hr>";
  17. // $c = null;
  18. //empty 检验变量是否为空,为空返回true 不为空 返回false
  19. var_dump(empty($c));
  20. echo "<hr>";
  21. //isset 用来检测变量是否被定义,若变量存在并且值不为null才返回true 否则返回false
  22. var_dump(isset($c));

四.变量作用域和魔术常量

名称含义
全局变量全局变量,声明全局外部的变量,不在函数里面的变量,函数内部无法直接访问全局变量,必须加上global 才访问全局变量
局部变量局部变量,声明在函数里面的变量

①全局变量:声明全局外部的变量

全局变量,函数内部无法直接访问外面的全局变量,要加上global才能访问到

用global访问外面的全局变量,多个值用,号隔开

②局部变量:声明在函数里面的变量

局部变量声明在函数内部,外部无法访问到函数内部声明的变量

③魔术常量:魔术常量长得像这样__XXXX__,看见两端有下划线的就是魔术常量

系统预定义魔术常量含义
__FILE__默认常量,PHP程序文件名
__LINE__默认常量,PHP程序行数

__FILE__默认常量,PHP程序文件名也就是当前文件所在的目录

__LINE__默认常量,PHP程序行数

代码块

  1. <?php
  2. //变量作用域:全局变量声明全局外部的变量
  3. //这是全局变量
  4. // $a = 100;
  5. // $b = 20;
  6. // function Sum(){
  7. // global 访问外面的全局变量
  8. // global $a ,$b;
  9. // 如果没有global 则不能直接访问外面的全局变量
  10. // return $a * $b ;
  11. // }
  12. // echo Sum();
  13. //局部变量:声明在函数内部
  14. function Sum(){
  15. $a = 50 ;
  16. $b = 30 ;
  17. return $a / $b ;
  18. }
  19. echo Sum();
  20. echo "<hr>";
  21. //声明在函数内部的变量无法访问
  22. echo $a ;
  23. echo "<hr>";
  24. //系统预定义魔术变量
  25. // echo __FILE__; //当前文件所在的目录
  26. var_dump( __LINE__);

更多相关文章

  1. 你真的知道为什么要使用void(0)代替undefined吗?
  2. JavaScript中是如何定义私有变量的
  3. c语言指针学习
  4. 由学习《软件设计重构》所想到的代码review(一)
  5. shell编程及自动化运维----变量
  6. 变量系列教材 (八)- 什么是Java的表达式
  7. 变量系列教材 (七)- Java 中final修饰变量
  8. 变量系列教材 (六)- 什么是Java的作用域
  9. 变量系列教材 (五)- Java的命名规则

随机推荐

  1. 注解匹配表字段与实体字段
  2. MySQL root 用户密码重置
  3. zabbix启动web界面提示:Can&#39;t connect
  4. linux时间与网络同步 // tomcat、redis、
  5. PostgreSQL操纵大对象(图片等)
  6. MySQL 插件CONNECTION_CONTROL和CONNECTI
  7. MySQL字符串相加函数如何运行?似曾相识还
  8. mysql行级锁测试
  9. SQLServer---查询过程中的数据类型转化
  10. MySql 存储过程插入年月日