Blogger Information
Blog 31
fans 0
comment 0
visits 30170
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
初认识php的变量作用域、过滤器、常量
emy
Original
571 people have browsed it

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

  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语法格式,仍需要死记背牢,比如超全局变量和魔术常量。知道了静态变量一般常用来统计页面浏览次数和函数次数。

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