Blogger Information
Blog 28
fans 0
comment 0
visits 25670
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php中变量,常量,函数
,多思曩惜,
Original
823 people have browsed it

变量

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 常量的特征,函数,预定义常量,魔术常量的使用方法
  • 变量的作用域的类型等
  • 静态变量的常识,和应用场景
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:你的作业没按顺序来, 这是在补吗?
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!