博客列表 >php变量与常量的认识

php变量与常量的认识

老陈
老陈原创
2020年04月17日 19:14:37514浏览

变量

1.变量作用

全局作用域 函数之外的变量生效范围
函数作用域 使用 function 关键字创建的作用域
php 中没有块作用域的概念, 这与其它编程语言不同, 根据作用域不同, 变量可以分为三类:
序号 变量类型 描述
1 私有变量 函数中定义的变量
2 全局变量 函数之外定义的变量
3 超全局变量 也叫预定义变量,访问不受作用域限制

  1. //全局作用域
  2. $sitName = 'php中文网';
  3. //声明函数:同时也创建一个函数作用域
  4. function getInfo () : string
  5. {
  6. //在函数中无法访问全局作用域中的变量
  7. // $private = $sitName;
  8. //1.可通过关键字 global 声明函数中的私有变量
  9. global $sitName;
  10. //2.使用超全局变量:$GLOBALS
  11. //函数中可以直接访问超全局变量
  12. $private = $GLOBALS['sitName'];
  13. return $private;
  14. }
  15. echo getInfo();
超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问。
序号 变量名 描述
1 $GLOBALS 引用全局作用域中可用的全部变量
2 $_SERVER 服务器和执行环境信息
3 $_GET HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组
4 $_POST HTTP POST 请求: 将变量以关联数组形式传入当前脚本
5 $_FILES HTTP 文件上传变量,保存着上传文件的全部信息
6 $_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量的数组
7 $_SESSION 当前脚本可用 SESSION 变量的数组
8 $_REQUEST 默认情况下包含了 $_GET$_POST$_COOKIE 的数组
9 $_ENV 通过环境方式传递给当前脚本的变量的数组

全局变量想了解更多请点击


静态变量

Static作用域当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。要做到这一点,请在您第一次声明变量时使用 static 关键字:

  1. function text3() :float
  2. {
  3. //局部静态变量 只在函数第一次调用的时候初始化,以后不会再被更新了
  4. //静态变量:可以理解为函数中的“伪全局变量”
  5. //实现函数在多次调用的过程中共享数据
  6. static $sum = 0;
  7. $sum = $sum + 1;
  8. return $sum;
  9. }
  10. echo text3().'<br>';
  11. echo text3().'<br>';
  12. echo text3().'<br>';

变量过滤器

PHP过滤器用于验证和过滤来自非安全来源的数据。测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。

序号 函数 描述
1 filter_var() 通过一个指定的过滤器来过滤单一的变量
2 filter_var_array() 通过相同的或不同的过滤器来过滤多个变量
3 filter_input 获取一个输入变量,并对它进行过滤
4 filter_input_array 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
  1. //例一:
  2. $age =30;
  3. //过滤器在验证的时候都是将变量转换成字符串验证的,所以 //$age ='30',也是正确的
  4. $age ='30';
  5. //过滤单个变量 filter_var()
  6. var_dump(filter_var($age,FILTER_VALIDATE_INT);
  7. //例二:
  8. //过滤多个变量filter_var_array()
  9. var_dump(filter_var_array([100,'php'],FILTER_VALIDATE_INT));
  10. //例三:
  11. var_dump(filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,['options'=>['min_range'=>1]]));
  12. //例四:
  13. //同时验证多个外部变量:filter_input_array()
  14. $args=[
  15. 'username'=> FILTER_SANITIZE_STRING,
  16. 'email'=>FILTER_VALIDATE_EMAIL,
  17. 'age'=> ['filter'=>FILTER_VALIDATE_INT,'flags'=>FILTER_REQUIRE_SCALAR,'options'=>['min_range'=>18,'max_range'=>60]],
  18. 'biog'=>FILTER_VALIDATE_URL,
  19. ];
  20. var_dump(filter_input_array(INPUT_GET,$args));

例4图解:

例4

常量

1.特征: PHP常量是一个简单值的标识符。该值在脚本中不能改变。一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
2.设置常量,使用 define() 函数,函数语法如下:
序号 参数 描述
1 name 必选参数,常量名称,即标志符
2 value 必选参数,常量的值
3 case_insensitive 可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的

2. 函数/关键字

序号 定义方式 描述
1 get_defined_constants() 查看系统所有常量
2 defined() 检测常量是否存在
3 define() 创建常量
4 const 关键字 创建常量
5 constant() 获取常量值

get_defined_constants(true): 常量分组打印,自定义常量在user分组defined(): 返回布尔值。

  1. // 不区分大小写的常量名
  2. define("GREETING", "欢迎访问 php.cn");
  3. echo greeting;
  4. //const 关键字定义
  5. const GREETING ='PHP';
  6. //常量不受作用域限制
  7. function test1()
  8. {
  9. //define()可以在函数中使用 ,const不能在函数中使用
  10. define('SEX','男');
  11. echo SEX;
  12. }
  13. test1();
  14. //流程控制中,define能用 ,const不能用
  15. if(true){
  16. define('EMAIL','123@163.COM');
  17. // const EMAIL = '123@163.com';
  18. echo EMAIL;
  19. }
  20. //const 用在类中,创建类常量
  21. class Demo1{
  22. const BBB = '123456@163.com';
  23. }
  24. echo Demo1::BBB;
  25. //常量通常只允许标量进行初始化
  26. //标量:单值变量,字符串,数值,布尔,null
  27. //php7.0支持数组初始化常量
  28. const DB_LINKS =[
  29. 'host'=>'localhost',
  30. 'username'=>'root',
  31. 'password'=>'root',
  32. 'charset'=>'utf8',
  33. ];
  34. echo '<pre>'.print_r(DB_LINKS,true).'</pre>';
  35. // constant()
  36. define('','其实我也是一个常量');
  37. echo constant('');
  38. //魔术常量
  39. echo '当前行号:'.__LINE__.'<br>';
  40. echo '当前文件:'.__FILE__.'<br>';
  41. echo '当前目录:'.__DIR__.'<br>';
  42. function hello123(){
  43. echo __METHOD__;
  44. }
  45. hello123();
  46. echo '<hr>';
  47. class D {
  48. public function index(){
  49. echo __METHOD__;
  50. }
  51. }
  52. (new D)->index();
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议