Blogger Information
Blog 145
fans 7
comment 7
visits 165507
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础知识:php变量
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
Original
1087 people have browsed it

变量

一、数据类型:

数据类型 详细数据类型
基本类型 string、(int、folat)、Boolean(true、false)
符合类型 class、array
特殊类型 NULL、resource(资源)

二、变量作用域(php中没有块作用域)

1、全局作用域:函数之外的作用域
2、函数作用域:使用function关键字创建的作用域
3、根据变量作用域不同变量分为:

变量类型 描述
私有变量 函数中定义的变量
全局变量 函数之外定义的变量
超全局变量 也叫预定义变量,访问不受作用域限制

三、静态变量(与之相对应:私有变量也叫动态变量,函数每一次调用访问都会被初始化;)

1、静态变量有关键字:static 声明定义;
2、在函数中的静态变量,定义时必须初始化(只能初始化一次且不能更新,默认值为0;);并且和函数作用域绑定
3、函数执行完毕时(离开函数作用域),静态值不丢失;可在函数多次调用中保持不变
4、函数中静态变量遵循私有变量约束,外部不可访问;

四、超全局变量

1、超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问;
2、常见的超全局变量:

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

五、常量

1、常量(推荐使用大写字符和下划线):与变量相比常量前面没有$符号;常量创建时必须初始化且禁止更新和删除;常量不受作用域限制
2、相关函数和关键字:
a、查询系统所有常量:get_defined_constants();设置参数true分组打印,自定义常量在user分组中
b、查询常量是否存在:defined();返回布尔值
c、定义顶常量:define();和关键字const声明定义(const关键字定义常量无法在函数中和流程控制中使用)
d、获取常量值:constant();
3、常量:预定义常量(魔术常量)
1、常见预定义常量

序号 预定义常量 描述
1 PHP_VERSION PHP 版本
2 PHP_MAXPATHLEN PHP 路径最大长度:1024
3 PHP_OS_FAMILY 操作系统:Windows/Darwin/Linux
4 PHP_SAPI web 服务器与 php 之间接口: apache2handler
5 PHP_EOL 行尾结束符
6 PHP_INT_MAX 最大整数: 9223372036854775807
7 PHP_INT_MIN 最小整数: -9223372036854775808
8 PHP_INT_SIZE 整数宽度: 8
9 PHP_FLOAT_MAX 最大浮点数:1.7976931348623E+308
10 PHP_FLOAT_MIN 整小浮点数: 2.2250738585072E-308
11 DEFAULT_INCLUDE_PATH 默认 PHP 命令路径
12 PHP_EXTENSION_DIR 默认 PHP 扩展路径
13 E_ERROR 运行时错误: 致命中断
14 E_PARSE 语法解析错误: 致命中断
15 E_NOTICE 运行时提示: 不中断
16 E_WARNING 运行时警告: 不中断
17 E_ALL 所有级别错误(除E_STRICT)
18 E_STRICT 更加严格的错误处理机制,高于E_ALL
19 TRUE 布尔真
20 FALSE 布尔假
21 NULL
22 DIRECTORY_SEPARATOR 目录分隔符

2、魔术常量

序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称

代码练习

1、代码:

  1. <?php
  2. $name='ldy';
  3. echo $GLOBALS["name"];
  4. // echo '<pre>'.print_r($GLOBALS,true).'</pre>';
  5. function sum(){
  6. // 私有变量
  7. $city='河南';
  8. // global $name;
  9. // return $name;
  10. // $GLOBALS 超全局变量
  11. return $GLOBALS['name'].'是'.$city;
  12. }
  13. echo sum();
  14. echo '<br>';
  15. echo print_r($_SERVER['SCRIPT_NAME'],true);
  16. echo '<hr>';
  17. // 静态变量演示
  18. function get_count(){
  19. static $n=0;
  20. $n++;
  21. return $n;
  22. }
  23. echo get_count();
  24. echo '<br>';
  25. echo get_count();
  26. echo '<br>';
  27. echo get_count();
  28. // 过滤器
  29. echo '<hr>';
  30. $num1=41;
  31. echo filter_var($num1,FILTER_VALIDATE_INT,["options"=>['min_range'=>18,'max_range'=>45]]);
  32. $email='ldy@php.cn';
  33. echo filter_var($email,FILTER_VALIDATE_EMAIL);
  34. echo '<br>';
  35. $a=1;
  36. $b="a";
  37. print_r(filter_var_array([$a,$b],FILTER_VALIDATE_INT));
  38. echo '<br>';
  39. var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT));
  40. echo '<br>';
  41. // 检测是否存在指定的外部变量:返回布尔值
  42. var_dump( filter_has_var(INPUT_GET,'p'));
  43. echo '<hr>';
  44. echo filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,['options'=>['min_range'=>1,'max_range'=>30]]) ? '页码正确':'页码不能超过30';
  45. $user=[
  46. 'email'=>FILTER_VALIDATE_EMAIL,
  47. 'age'=>['filter'=>FILTER_VALIDATE_INT,'flags'=>FILTER_REQUIRE_SCALAR,'options'=>['min_range'=>18,'max_range'=>100]],
  48. 'blog'=>FILTER_VALIDATE_URL
  49. ];
  50. echo '<pre>'.print_r(filter_input_array(INPUT_GET,$user),true).'</pre>';
  51. // 常量
  52. echo '<hr>';
  53. // echo '<pre>'.print_r(get_defined_constants(true),true).'</pre>';
  54. define('ABC',__FILE__);
  55. echo ABC.'<br>';
  56. echo __DIR__;
  57. const COUSER="php";
  58. echo '<hr>';
  59. class AbC
  60. {
  61. const DOC='PHP';
  62. function getName(){
  63. define('BOC','我是一个常量');
  64. return BOC;
  65. }
  66. }
  67. echo __LINE__.'<br>';
  68. echo AbC::DOC;
  69. echo (new AbC)->getName();
  70. echo '<br>';
  71. // dirname(__FILE__)和__DIR__
  72. echo dirname(__FILE__);

2、运行结果

总结

1、变量的作用域:函数作用域
2、超全局变量、常量不受作用域限制
3、超全局变量和魔术常量需要强制记忆;实战使用率较高!
4、静态变量常用来统计页面浏览次数和函数次数;
5、过滤器在网站实战中比较重要!

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