Blogger Information
Blog 26
fans 0
comment 0
visits 21452
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量与常量
default
Original
728 people have browsed it

1.变量和变量作用域

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

$siteName='php中文网'//这是简单的变量赋值

  • 在function中全局变量是不能在function使用所以,有两个办法
  • 1,global 把变量变成全局变量
  • 2,$GLOBALS[‘siteName’] 在系统中内置的全局变量里面去找
  • $GLOBALS 是数组 直接打印后能查看到页面中有多少个变量及页面信息
    1. function getInfo(){
    2. // 第一种
    3. // global $siteName;//把函数内的变量全局化 变成全局变量
    4. // $private=$siteName;
    5. // 第二种 在系统中内置的全局变量里面去找
    6. $private = $GLOBALS['siteName'];
    7. return $private;
    8. }
  • 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 变量名 描述
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 通过环境方式传递给当前脚本的变量的数组

2.静态变量

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

应用场景

  • 当多次调用同一函数,且要求每次调用之间共享或保留某些变量的时候
  • 尽管全局变量也可以办到,但没必要, 采用局部静态变量更合适
  1. namespace ns1;
  2. function tset1() {
  3. // 私有变量也叫动态变量 每次调用他都会初始化
  4. $sum =0;
  5. $sum= $sum+1;
  6. return $sum;
  7. }
  8. echo tset1(),'<br>';
  9. echo tset1(),'<br>';
  10. echo tset1(),'<br>';
  11. echo tset1(),'<br>';
  12. echo '<hr>';
  13. //不同的目录下面有相同的文件名
  14. namespace ns2;
  15. function tset1() {
  16. // 在函数中如果把私有变量变成全局变量那么函数的计算值会累加 所以说 全局变量是静态变量 但是页面中防止变量冲突 不能用来函数调用免得造成全局污染 所以在函数中要定义静态变量
  17. //局部静态变量:只在函数第一次调用的时候被初始化,以后不会再被更新
  18. static $sum=0;
  19. $sum= $sum+1;
  20. return $sum;
  21. }
  22. echo tset1(),'<br>';
  23. echo tset1(),'<br>';
  24. echo tset1(),'<br>';
  25. echo tset1(),'<br>';

3.变量过滤器

变量过滤函数里面配置了很多的常量 :

  • 1.FILTER_VALIDATE_INT 整数类型
  • 2.FILTER_VALIDATE_EMAIL 验证邮箱类型
  • 3.FILTER_SANITIZE_STRING 检测字符串类型;
  • 4.FILTER_REQUIRE_SCALAR 单值变量
  • 5.FILTER_VALIDATE_URL 检测url类型

    变量过滤函数

  • 1.filter_var() //过滤单个变量;
  • 2.filter_var_array()过滤多个变量 也就是数组
  • 3.filter_has_var() 检测是否 存在指定的外部变量 ;
  • 4.filter_input()访问外部变量的过滤器;
  1. //变量过滤器
  2. //foreach () //遍历数组的
  3. foreach (filter_list() as $filter){
  4. echo $filter,'===>',filter_id($filter).'<br>';
  5. }
  6. //过滤单个变量是 filter_var
  7. //年龄 整数类型的
  8. $age=33;
  9. $options=['options'=>["min_range"=>'18','max_range'=>'60']];
  10. var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));
  11. //过滤邮箱
  12. $email ='1@aa.cn';
  13. var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
  14. //过滤多个变量
  15. var_dump(filter_var_array([$age,$email],FILTER_VALIDATE_INT));
  16. //检测是否 存在指定的外部变量 filter_has_var();
  17. //INPUT_GET ,INPUT_POST,INPUT_COOKIE,INPUT_SESSION,INPUT_ENV
  18. filter_has_var(INPUT_GET,'P');
  19. echo '<hr>';
  20. //访问外部变量的过滤器
  21. $options=['options'=>["min_range"=>'1']];
  22. var_dump(filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,$options));
  23. echo filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,$options)?'321':'123';
  24. //同事验证多个外部变量 filter_var_array 就是提交过来的 接受方式用get
  25. echo '<hr>';
  26. $args=[
  27. 'username'=>FILTER_SANITIZE_STRING,
  28. 'email'=>FILTER_VALIDATE_EMAIL,
  29. 'age'=>[
  30. 'filter'=>FILTER_VALIDATE_INT,
  31. 'flags'=>FILTER_REQUIRE_SCALAR,//单值变量
  32. 'options'=> ['min_range'=>14, 'max_range'=>18],
  33. 'blog'=>FILTER_VALIDATE_URL,
  34. ]
  35. ];
  36. var_dump(filter_input_array(INPUT_GET,$args));

常量

1. 特征

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

2. 函数/关键字

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

    3. 预定义常量

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

序号 预定义常量 描述
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 目录分隔符

更多预定义常量:https://www.php.net/manual/zh/reserved.constants.php


系统中的常量

  1. //print_r(get_defined_constants(true));
  2. //[Core]分组常量 [filter] 过滤器常量 [hash]哈希常量 [json]json常量 加true 就是分组查看
  3. //常量只允许用标量来初始化 标量是 :字符串 数值布尔 null
  4. //php7+中常量可以赋值 数组
  5. //print_r(get_defined_constants(true));

自定义常量

  1. //这个函数是检测常量在不在
  2. define('APP_PATH',__DIR__.'/app/admin');

定义常量

  • 1常量有两种定义方式
  • 1.1.define(‘SHOP’,’买她’);
  • 1.2.const SHOPS = ‘买她’;
  • 2.常量不受作用域限制
  • 3.用函数创建常量是可以的不能用const()
  • 4.流程控制中define()能用 ,const不能
  • 5.const 可以用在类中创建一个类常量 类中 不能用define();
  • 6.常量数组的形式 //php7+中常量可以赋值 数组
  • 7.constant(‘’)//如果定义一个常量的名字为空他其实也是常量 但是打印的时候用echo 肯定打印不出来所要用constant();
  1. define('SHOP','买她');
  2. //常量不能反复定义
  3. const SHOPS = '买她';
  4. //常量不受作用域限制
  5. //用函数创建常量是可以的不能用const
  6. function shop(){
  7. echo SHOPS;
  8. echo '<hr>';
  9. }
  10. //shop();
  11. //流程控制中define能用 ,const不能
  12. if (true){
  13. define("COOKIE",'油炸鬼');
  14. // const FOOT='脚';
  15. echo COOKIE;
  16. echo '<hr>';
  17. }
  18. //const 可以用在类中创建一个类常量 类中 不能用define();
  19. class demo{
  20. const DEMO='新的';
  21. }
  22. echo demo::DEMO,'<hr>';
  23. /常量数组的形式
  24. const DB_LINKS = [
  25. 'host'=>'127.0.0.1',
  26. 'username'=>'root',
  27. 'password'=>'password',
  28. ];
  29. print_r(DB_LINKS, '<hr>');
  30. //常量的特殊情况
  31. //如果定义一个常量的名字为空他其实也是常量 但是打印的时候用echo 肯定打印不出来所要用constant();
  32. define('USER_NAME','我是常量');
  33. define('','我是常量');
  34. echo '';//这样是打印不出来的
  35. echo constant('');//这样是可以的
  36. echo PHP_VERSION;

魔术常量

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