博客列表 >初认识php的变量作用域、过滤器、常量

初认识php的变量作用域、过滤器、常量

emy
emy原创
2020年04月19日 12:58:30568浏览

一、变量作用域,又叫"变量范围", 也就是说变量的生效范围。又分以下两种:

  1. 函数作用域: php 中只有函数可以创建作用域, 函数之外的代码全部在全局空间中,使用‘function’关键字创建的作用域。

  2. 全局作用域:函数之外的变量生效范围。
    举例说明:

<?php
# 变量作用域
// 全局作用域
$myName = 'emy';
// 全局变量会自动注册也为超全局变量数组$GlOBALS的一个值
// 超全局变量不受作用域限制
// print_r($GLOBALS['myName']);
// 声明函数: 同时也创建一个函数作用域
function getInfo() : string
{
    $private = $GLOBALS['myName'];
    // 函数中可以直接访问超全局变量
    echo $_SERVER['SCRIPT_NAME']. '<br>';
    return $private;
}
echo getInfo();
echo $_SERVER['SCRIPT_NAME']

3.根据作用域不同, 变量可以分为三类:

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

举例说明:

<?php
// 私有变量
function news(): float
{
    // 私有变量,也叫动态变量,在函数中每一次都会自动初始化
    // 并且无法在多次调用过程中保持不变
    $count = 3;
    $count = $count - 1;
    return $count;
}

echo news(), '<br>';
echo news(), '<br>';
echo news(), '<br>';

// 全局变量
$count = 10;
function news(): float 
{
    global $count;
    $sum = $sum + 1;
    return $count;
}

echo news(), '<br>';
echo news(), '<br>';
echo news(), '<br>';

// 静态变量:实现函数在多次调用中,用于共享数据
function news(): float 
{
   static $count = 20;
    $count = $count + 1;
    return $count;
}

echo news(), '<br>';
echo news(), '<br>';
echo news(), '<br>';

$count = 5;
echo $count + 40;
echo '<br>';
echo $count + 20;
echo '<br>';
echo $count + 90;
// 总结:变量的本质是数据共享,函数的本质是代码共享

二、变量过滤器:实现比如表单输入数据的验证,分以下几种:

变量类型描述
过滤单个变量filter_var()
过滤多个变量filter_var_array()
检测外部变量filter_has_var()
访问外部变量的过滤器filter_input()
验证多个外部变量filter_input_array()

举例说明:

<?php
# 变量过滤器
// 1. 过滤单个变量filter_var()
// 次数
$cishu = 15;
$cishu = '15';
$cishu = 15;
var_dump(filter_var($cishu, FILTER_VALIDATE_INT,['options'=>['min_range'=>10,'max_range'=>20]]));
echo '<hr>';
$email = 'emy@qq.com';
$email = 'emy@';
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
var_dump(filter_var($email, 274));

// 2. 过滤单个变量filter_var_array()
var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT));

// 3. 检测是否存在指定的外部变量, filter_has_var()
// 对于URL中的查询字符串: 在URL地址?后面的键值对
// php.edu/index.php?
// id=10
// name=admin
// INPUT_GET: 表示要检测的是$_GET,就是get参数,其实就是get请求
// INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
var_dump(filter_has_var(INPUT_GET, 'page'));
echo 'get变量p = ' . $_GET['p'];

// 4. 访问外部变量的过滤器,filter_input
var_dump(filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]));

// 5. 同时验证多个外部变量: filter_input_array()
$args = [
    'username' => FILTER_SANITIZE_STRING,
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => ['filter' => FILTER_VALIDATE_INT, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]],
    'blog' => FILTER_VALIDATE_URL,
];
var_dump(filter_input_array(INPUT_GET, $args));

三、常量:常量是单个值的标识符(名称)。在脚本中无法改变该值。
有效的常量名:以字符或下划线开头(前面没有 $ 符号),常量创建时必须用标量初始化。
注:常量不受作用域限制。

定义方式描述
get_defined_constants()查看系统所有常量
defined()检测常量是否存在
define()创建常量,返回布尔值
const 关键字创建常量,用在类中,创建类常量
constant()获取常量值
  1. 预定义常量
    预定义常量非常多,以下是最常用的22个常量,具体和其它扩展相关的知识,可点这里查看

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

  2. 魔术常量: 也属于“预定义常量", 所谓"魔术", 是指常量的值,会随它们在代码中的位置改变而改变, 魔术常量不区分大小写, 但是推荐全部大写。下面列出较常用的:

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

四、学习总结:对变量、过滤器和常量有一个最基本的认识。对于固定的一些PHP语法格式,仍需要死记背牢,比如超全局变量和魔术常量。知道了静态变量一般常用来统计页面浏览次数和函数次数。

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