博客列表 >PHP变量作用域以及常量

PHP变量作用域以及常量

邱世家的博客
邱世家的博客原创
2020年07月09日 15:59:341212浏览

变量作用域

  1. <?php
  2. // 全局作用域:写到函数外面的
  3. $name = 'php';
  4. // 函数作用域
  5. function get_name(){
  6. $private = 123;
  7. return $private;
  8. }
  9. // 输出123
  10. echo get_name();
  • 在函数中访问函数外部变量的两种方法(无法直接访问):
    1. <?php
    2. // 全局作用域:写到函数外面的
    3. $name = 'php';
    4. // 函数作用域
    5. function get_name(){
    6. //1. 在函数中做一个声明:用的很少不推荐
    7. global $name;
    8. return $name;
    9. //2. 通过超全局变量$GLOBALS[]来访问
    10. return $GLOBALS['name'];
    11. //$private = 123;
    12. //return $private;
    13. }
    14. echo '通过超全局变量$GLOBALS[]来访问:', get_name(),'<hr>';
    15. // 获取当前目录绝对地址
    16. echo $_SERVER['SCRIPT_FILENAME'];

常量

  • 常量:前面没有$,全部大写,多个单词之间_链接,且必须初始化,不能删除,不受作用域限制,可以在函数中访问。
  • 定义常量有两种方式:1:const关键字。2:函数定义
  • 类常量只允许用const
  1. const APP_NAME = '中文网';
  2. define('APP_PATH','/phpstydu');
  3. echo APP_NAME,'<br>';
  4. echo APP_PATH;
  • 返回常量值得两种方式以及区别:echo和constant()函数:
    1. const APP_NAME = '中文网';
    2. define('APP_PATH','/phpstydu');
    3. echo APP_PATH,'<br>';
    4. echo constant('APP_NAME');
  • 当常量名是变量值得时候 要打印常量 必须用constant()函数
  • 当定义常量名为空字符串的时候也可以用constant()函数 打印常量值
    1. const APP_NAME = '中文网';
    2. define('APP_PATH','/phpstydu');
    3. echo APP_PATH,'<br>';
    4. echo constant('APP_NAME'),'<hr>';
    5. // 当常量名是变量值得时候 要打印常量 必须用constant()函数
    6. $get = 'APP_NAME';
    7. echo '通过echo获取是获取不到得:', $get,'<br>';
    8. echo '通过constant函数获取是正确的:',constant($get),'<br>';
    9. // 当定义常量名为空字符串的时候也可以用constant()函数 打印常量值
    10. define('','admin@php.cn');
    11. echo '通过echo方式获取不到:' , '','<br>';
    12. echo '通过constant()函数获取到:' ,constant('');

  1. // 查看当前可用常量 get_defined_constants(true), 参数true是分类
  2. print_r(get_defined_constants(true));

  1. // 查看当前用户自定义常量
  2. print_r(get_defined_constants(true)['user']);

  1. // 预定义常量
  2. echo '版本号' . PHP_VERSION . '<br>';
  3. echo '操作系统' . PHP_OS_FAMILY . '<br>';
  4. echo '最大整数' . PHP_INT_MAX . '<br>';
  5. echo '最大浮点数' . PHP_FLOAT_MAX . '<br>';
  6. //Windows 目录分隔符反斜线\, mac是正斜线/
  7. echo '目录分隔符' . DIRECTORY_SEPARATOR . '<hr>';
  8. //魔术常量
  9. echo '当前行号' . __LINE__ . '<br>';
  10. echo '当前文件' . __FILE__ . '<br>';
  11. echo '当前目录' . __DIR__ . '<hr>';

命名空间:namespace

  • 命名空间: 解决了全局成员的命名冲突问题。(针对不受作用域限制的成员也就是全局成员)
  • 全局空间的成员,不允许重复定义。全局成员包括:常量,类【接口】。函数第一个命名空间 之前不允许有代码
  1. namespace ns1{
  2. const APP_NAME = 'PHP开发';
  3. }
  4. namespace ns2{
  5. const APP_NAME = '开发';
  6. echo '命名空间ns2中访问命名空间ns1中得:' . \ns1\APP_NAME , '<br>';
  7. }
  8. // 全局空间 (没有名字/匿名空间)
  9. namespace {
  10. echo '全局空间访问ns1中得:' . \ns1\APP_NAME , '<br>';
  11. echo '全局空间访问ns2中得:' . \ns2\APP_NAME , '<br>';
  12. }

常用变量过滤器

  • 验证单个变量
  1. //1. 过滤单个变量 filter_var(要过滤的变量,过滤器常量)
  2. // FILTER_VALIDATE_INT 验证整数
  3. $age = 30;
  4. $age = 50;
  5. $options = ['options'=>['min_range'=>18,'max_range'=>60]];
  6. var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));
  7. echo '<hr>';
  • 验证邮箱
  1. $email = 'admin@php.cn';
  2. $email = 'admin@php';
  3. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  4. echo '<br>';
  5. $email = 'admin@php.cn';
  6. //也可以用FILTER_VALIDATE_EMAIL这个过滤器常量得id来验证
  7. var_dump(filter_var($email, 274));
  8. echo '<hr>';
  • 验证多个变量
  1. //2. 验证多个变量 filter_var_array([多个变量],过滤器常量)
  2. $a = 10;
  3. $b =20;
  4. // 变量较多时放到一个数组中
  5. $arr = [$a,$b];
  6. var_dump(filter_var_array($arr, FILTER_VALIDATE_INT));

  • 外部变量:通常通过http请求发送过来的,表单,get,post
  1. // 外部变量: 通常通过http请求发送过来的,表单,get,post
  2. // 使用 GET参数来演示外部变量的获取与验证/过滤
  3. // GET 参数是在url后面添加一个?当做查询字符串
  4. //filter_input(输入类型get/post,变量名,过滤器,参数)
  5. echo 'id=' . $_GET['id'];
  6. echo '<hr>';
  7. $options = ['options'=>['min_range'=>1]];
  8. var_dump(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT,$options));

  • 同时验证多个外部变量
  1. $args = [
  2. 'username' => FILTER_SANITIZE_STRING,
  3. 'email' => FILTER_VALIDATE_EMAIL,
  4. 'age' => ['filter'=>FILTER_VALIDATE_INT,$options = ['options'=>['min_range'=>18,'max_range'=>60]]],
  5. 'blog' => FILTER_VALIDATE_URL
  6. ];

总结:变量过滤器需要多多理解

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议