博客列表 >php中变量,常量,函数

php中变量,常量,函数

,多思曩惜,
,多思曩惜,原创
2020年04月28日 23:08:19834浏览

变量

1.作用域

  • 变量作用域,也叫“变量范围”,即定义变量时的上下文环境
  • 变量作用域,通俗的说,就是变量的生效范围
  • 一个变量必定属于一个作用域,这个作用域也包括了当前作用域中引入其他文件
  • 也有不受作用域限制的变量,例如超全局变量,在程序中任何地方都是有定义的
  • 函数作用域:php中只有函数可以创建作用域,函数之外的代码全部在全局空间中
作用域 描述
函数作用域 使用function关键字创建的作用域
全局作用域 函数之外的变量生效范围
  • php中没有块级作用域的概念,这与其他编程语言不同。
  • 根据作用域不同,变量可以分为三类
变量类型 描述
私有变量 函数中定义的变量
全局变量 函数之外定义的变量
超全局变量 也叫预定义变量,访问不受作用域限制
  • 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问

|变量名|描述|
|$GLOBALS|引用全局域中可用的全部变量|
|$_SERVER|服务器和执行环境信息|
|$_GET|http get 请求:通过url参数传递给当前脚本的变量的数组|
|$_POST|HTTP POST 请求:将变量以关联数组形式传入当前脚本|
|$_FILES|HTTP 文件上传变量,保存着上传文件的全部信息|
|$_COOKIE|通过HTTP Cookies方式传递给当前脚本的变量的数组|
|$_SESSION|当前脚本可用SESSION变量的数组|
|$_REQUEST|默认情况下包含了 $_GET$_POST$_COOKIE 的数组|
|$_ENV|通过换届方式传递给当前脚本的变量的数组|

  1. <?php
  2. //超全局变量不需要定义,不需要初始化
  3. //$GLOBALS = .....;;
  4. # 变量作用域
  5. //全局作用域
  6. $siteName = 'php中文网';
  7. // 全局变量会自动注册也为超全局变量数组$GlOBALS的一个值
  8. // 超全局变量不受作用域限制
  9. print_r($GLOBALS['siteName']);
  10. // 声明函数: 同时也创建一个函数作用域
  11. function getInfo1(): string
  12. {
  13. //定义了一个函数“私有变量”
  14. // 方法1:global
  15. global $siteName;
  16. $private = $siteName;
  17. return $private;
  18. }
  19. echo getInfo1();
  20. function getInfo2(): string
  21. {
  22. // 2. 使用超全局变量
  23. $private = $GLOBALS['siteName'];
  24. // 函数中可以直接访问超全局变量
  25. return $private;
  26. }
  27. echo getInfo2();
  28. //返回当前文件名称
  29. echo $_SERVER['SCRIPT_NAME'] . '<br>';
  30. ?>
  • 预览效果

8. 静态变量

8.1 基本常识

  • 定义在函数中的静态变量使用static修饰,并且与函数作用域绑定
  • 静态变量定义时必须初始化,且只能初始化一次,默认为0
  • 当程序执行离开函数作用域后,静态变量的值不丢失
  • 静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中
  • 函数中静态变量遵循私有变量约束, 全局不可访问

8.2 应用场景

  • 当多次调用同一函数,且要求每次调用之间共享或保留某些变量的时候
  • 尽管全局变量也可以办到,但没必要, 采用局部静态变量更合适
  1. <?php
  2. # 静态变量
  3. namespace ns1;
  4. function test1(): float
  5. {
  6. //私有变量,也叫动态变量,在函数中每一次都会自动初始化
  7. //并且无法在多次调用过程中保持不变
  8. $sum = 0;
  9. $sum += 1;
  10. return $sum;
  11. }
  12. echo test1(), '<br>';
  13. echo test1(), '<br>';
  14. echo test1(), '<br>';
  15. echo '<hr>';
  16. //命名空间
  17. //不同的目录下面可以有相同的文件名
  18. namespace ns2;
  19. //全局变量
  20. $sum = 0;
  21. function test1(): float
  22. {
  23. global $sum;
  24. $sum += 1;
  25. return $sum;
  26. }
  27. echo test1(), '<br>';
  28. echo test1(), '<br>';
  29. echo test1(), '<br>';
  30. echo '<hr>';
  31. namespace ns3;
  32. function test1(): float
  33. {
  34. // 局部静态变量: 只在函数第一次调用的时候被初始化,以后不会再被更新了
  35. // 静态变量,可以理解为在函数中的"伪全局变量"
  36. // 实现函数在多次调用的过程中共享数据
  37. static $sum = 0;
  38. $sum += 1;
  39. return $sum;
  40. }
  41. echo test1(), '<br>';
  42. echo test1(), '<br>';
  43. echo test1(), '<br>';
  44. echo '<hr>';
  45. $num = 2;
  46. // 变量的本质是数据共享
  47. // 函数的本质是代码共享
  48. echo $num1 + 1;
  49. echo '<br>';
  50. echo $num1 + 5;
  51. echo '<br>';
  52. echo $num1 + 8;
  53. ?>
  • 效果

变量过滤器

  1. <?php
  2. # 变量过滤器
  3. foreach (filter_list() as $filter) {
  4. echo $filter . '=>' . filter_id($filter) . '<br>';
  5. }
  6. echo '<hr>';
  7. ?>
  • 预览效果
  1. <?php
  2. # 变量过滤器
  3. //1.过滤单个变量filter_var()
  4. //过滤年龄
  5. $age = 30; //返回值int(30)
  6. $age = 12; //返回值 bool(flase)
  7. $age = 69; //返回值 bool(flase)
  8. var_dump(filter_var($age, FILTER_VALIDATE_INT, ['options' => ['min_range' => 18, 'max_range' => 68]]));
  9. echo '<hr>';
  10. $email = 'admin@php.cn';
  11. $email = 'admin@'; //返回值 bool(flase)
  12. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  13. var_dump(filter_var($email, 274));
  14. echo '<hr>';
  15. // 2.过滤多个变量filter_var_array()
  16. var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT)); //[返回int(100),返回bool(false);]
  17. echo '<hr>';
  18. // 3.检测是否存在指定的外部变量,filter_has_var()
  19. // 对于url中的查询字符串:在url地址?后面的键值对
  20. // php.cn/index.php?
  21. // id=10
  22. // name=admin
  23. // INPUT_GET:表示要检测的是$_GET,就是get参数,其实就是get请求
  24. // INPUT_GET,INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
  25. var_dump(filter_has_var(INPUT_GET, 'page')); //存在返回ture
  26. var_dump(filter_has_var(INPUT_GET, 'p')); // 不存在返回flase
  27. echo '<hr>';
  28. echo 'get变量p=' . $_GET['page']; // 获取外部变量值
  29. echo '<hr>';
  30. // 4. 访问外部变量的过滤器,filter_input
  31. var_dump(filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]));
  32. // 5.同时验证多个外部变量:filter_input_array()
  33. echo '<hr>';
  34. $a = [
  35. 'name' => FILTER_SANITIZE_STRING,
  36. 'email' => FILTER_VALIDATE_EMAIL,
  37. // 'flags'=>FILTER_REQUIRE_SCALAR,限制标量
  38. 'age' => ['filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]],
  39. 'blog' => FILTER_VALIDATE_URL,
  40. ];
  41. // 标量:单值变量, 字符串, 布尔, 数值,
  42. // 复合: 对象, 数组
  43. var_dump(filter_input_array(INPUT_GET, $a));
  44. ?>
  • 效果

常量

1. 特征

特征
常量前面没有美元符号$
常量创建时必须初始化
常量禁止更新和删除
常量不受作用域限制
推荐使用大写字母加下划线命名

2. 函数/关键字

定义方式 描述
get_defined_constants() 查看系统所有常量
defined() 检测常量是否存在
define() 创建常量
const 关键字 创建常量
constant() 获取常量值
  • get_defined_constants(true): 常量分组打印,自定义常量在user分组
  • defined(): 返回布尔值

3. 预定义常量

预定义常量非常多,有许多与具体扩展相关,如 PDO, 这里仅列出系统级常用的:

预定义常量 描述
PHP_VERSION PHP 版本
PHP_MAXPATHLEN PHP 路径最大长度:1024
PHP_OS_FAMILY 操作系统:Windows/Darwin/Linux
PHP_SAPI web 服务器与 php 之间接口: apache2handler
PHP_EOL 行尾结束符
PHP_INT_MAX 最大整数: 9223372036854775807
PHP_INT_MIN 最小整数: -9223372036854775808
PHP_INT_SIZE 整数宽度: 8
PHP_FLOAT_MAX 最大浮点数:1.7976931348623E+308
PHP_FLOAT_MIN 整小浮点数: 2.2250738585072E-308
DEFAULT_INCLUDE_PATH 默认 PHP 命令路径
PHP_EXTENSION_DIR 默认 PHP 扩展路径
E_ERROR 运行时错误: 致命中断
E_PARSE 语法解析错误: 致命中断
E_NOTICE 运行时提示: 不中断
E_WARNING 运行时警告: 不中断
E_ALL 所有级别错误(除E_STRICT)
E_STRICT 更加严格的错误处理机制,高于E_ALL
TRUE 布尔真
FALSE 布尔假
NULL
DIRECTORY_SEPARATOR 目录分隔符
  1. <?php
  2. #定义常量
  3. //define()函数
  4. define('TEACHER', '老师');
  5. //conts 关键字
  6. const COURSE = 'php';
  7. //常量不受作用域限制
  8. function test1()
  9. {
  10. echo TEACHER . '教:' . COURSE . '<br>';
  11. define('SEX', '男');
  12. echo SEX . '<br>';
  13. // const不能用在函数中
  14. // const AGE = 30;
  15. // echo AGE;
  16. }
  17. test1();
  18. echo '<hr>';
  19. //流程控制中,define能用,const不能用
  20. if (true) {
  21. define('EMAIL', 'admin@php.cn');
  22. // const EMAIL = 'admin@php.cn';
  23. echo EMAIL;
  24. }
  25. echo '<hr>';
  26. //const 用在类中,创建类常量
  27. class Demo
  28. {
  29. const HELLO = 'PHP.CN';
  30. // define('A',100);
  31. }
  32. echo Demo::HELLO . '<br>';
  33. // echo Demo::A.'<br>';
  34. // 常量通常只允许用标量进行初始化
  35. // 标量: 单值变量, 字符串, 数值,布尔, null
  36. // php7.0+支持数组初始化常量
  37. const DB_LINKS = [
  38. 'host' => 'localhost',
  39. 'name' => 'root',
  40. 'password' => 'root',
  41. 'charset' => 'utf-8',
  42. ];
  43. echo '<pre>' . print_r(DB_LINKS, true) . '</pre>';
  44. //constant()
  45. echo constant('TEACHER') . '<br>';
  46. echo TEACHER . '<br>';
  47. $constantName = 'EMAIL';
  48. echo constant($constantName);
  49. echo '<hr>';
  50. define('USER_NAME', '其实我是一个常量');
  51. echo USER_NAME;
  52. define('', '其实我是一个常量2');
  53. echo constant('');

4. 魔术常量

  • 魔术常量也属于”预定义常量”, 比较特殊所有单独列出
  • 所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
  • 魔术常量不区分大小写, 但是推荐全部大写
魔术常量 描述
__LINE__ 文件中的当前行号
__FILE__ 文件的完整路径和文件名
__DIR__ 文件所在目录
__FUNCTION__ 当前的函数名称
__CLASS__ 当前类名称
__TRAIT__ 当前Trait名称
__METHOD__ 当前类方法名称
__NAMESPACE__ 当前命名空间名称
  1. <?php
  2. #魔术常量
  3. echo '当前行号:' . __LINE__ . '<BR>';
  4. echo '当前文件:' . __FILE__ . '<BR>';
  5. echo '当前目录:' . __DIR__ . '<BR>';
  6. // 当前的函数名称
  7. function hello123()
  8. {
  9. echo __FUNCTION__;
  10. }
  11. hello123();
  12. echo '<hr>';
  13. // 当前类方法名称
  14. class D
  15. {
  16. public function index()
  17. {
  18. echo __METHOD__;
  19. }
  20. }
  21. (new D)->index();
  • 预览

总结

  • php 常量的特征,函数,预定义常量,魔术常量的使用方法
  • 变量的作用域的类型等
  • 静态变量的常识,和应用场景
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议