0703作业
一、 变量的作用域及访问
作用域的意义:
变量的生效范围;
查找变量的工具。
作用域分类 | 范围 |
---|---|
全局作用域 | 访问全局作用域有两种方法:1.需使用global关键字,表示声明需要到外部去寻找 ; 2.使用超全局变量$GLOBALS来访问(推荐) |
函数作用域 | 函数会创建出一个独立的作用域,只能在函数内部访问,也叫私有变量,不能直接访问外部的变量。 |
<?php
// 查看每个脚本中预定义的超全局变量
echo '<pre>'.print_r($GLOBALS,true);
//超全局变量查看文件路径:
echo $_SERVER['REQUEST_URL'];
echo $_SERVER['SCRIPT_FILENAME'];
// 超全局变量, 不受作用域限制,可以在函数中直接访问
$siteName = "php中文网";
function getInfo(){
// 超全局变量$GLOBALS['键名']
return $GLOBALS['siteName'];
}
echo getInfo();
在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素,可以通过键名调用如:$GLOBALS[‘siteName’];
二、常量的定义及其访问
常量的定义及访问 | 代码及功能 |
---|---|
常量的定义方式 | 定义常量有2种方式:1.使用const关键字;2.使用define()函数 ;注意,类中的常量只能够用const定义 |
常量的访问方式 | 访问常量也有两种方式:1.直接通过常量名XXXXCONST_NAME;2.constant(‘XXXXCONST_NAME;’,如常量名为空的常量名称只能通过constant()调取) |
常量的定义示例
//关键字: const
const APP_PATH = '/phpstudy_pro';
// 函数define
define('APP_NAME', '客户管理系统');
//类常量只允许用const
class User
{
const NATION = 'CHINA';
}
get_defined_constants(true)
常量的访问示例
//查看哪些可用的定义的常量
print_r(get_defined_constants(true));
//查看用户自定义的常量
print_r(get_defined_constants(true)['user']);
常量值被定义后,在脚本的其他任何地方都不能被改变。
常量定义的时候必须初始化
常量前没有$
常量不受作用域限制,的作用域是全局,一旦创建,就不能删除,用unset也不行
常量的命名规范一般全部用大写表示,中间断句分词可以用_下划线连接
常量除了用户自定义以外,还有预定义常量和魔术常量两种系统定义的常量
一些常用的系统预定义常量
常量名 | 功能 |
---|---|
PHP_VERSION | 当前PHP版本号 |
PHP_OS_FAMILY | 操作系统 |
PHP_INT_MAX | 最大整数 |
PHP_FLOAT_MAX | 最大浮点数 |
DIRECTORY_SEPARATOR | 目录分隔符(是/还是\不同的系统环境不一样) |
魔术常量
一般常量的值都是不变的,魔术常量却是根据系统自动改变,它与变量的区别就是系统自动生成,不是由用户指定和修改的
魔术常量 | 功能 |
---|---|
LINE | 当前行号 |
FILE | 文件的完整路径和文件名 |
DIR | 文件所在目录,目录的值不包含最后的/或者\ |
FUNCTION | 当前的函数名称 |
CLASS | 当前类名称 |
TRAIT | 当前Trait名称 |
METHOD | 当前类方法名称 |
NAMESPACE | 当前命名空间名称 |
命名空间
命名空间用于解决命名冲突的问题
在全局空间中的成员(常量、类、函数、接口)需要具有唯一性。不能重复命令
命名空间namespace,就是来解决这一问题的。
<?php
// 命名空间
// 第一个命名空间,定义了名为model的模型,内容是模型1'
namespace names1 {
const model = '模型1';
}
// 第而个命名空间,定义了同样名为model的模型,但是内容是模型2'
namespace names2 {
const model = '模型2';
}
// 全局空间,默认空间没有名称
// 同样都是名字为model的模型,但是在全局钟通过加入了命名空间区分开了
namespace {
echo \names1\model;
echo '<hr>';
echo \names2\model;
}
就如同Windows中同一个文件夹c:/根目录内不能有两个同为新建文件夹的目录,但是C:/a/新建文件夹 C:/b/新建文件夹通过不同的空间区分开来就可以命名同一个名称
三、变量过滤器
//查询所有的过滤器
foreach (filter_list() as $filter) {
echo $filter . ' => ' . filter_id($filter) . '<br>';
}
<?php
//案例1 过滤int范围
$rent = 3000;
$options = ['options' => ['min_range' => 800, 'max_range' => 20000]];
echo '案例1,过滤int范围结果:';
var_dump(filter_var($rent, FILTER_VALIDATE_INT, $options));
echo '<hr>';
//案例2 过滤浮点格式
$price = 12.5;
echo '案例2,过滤浮点格式结果:';
var_dump(filter_var($price = 12.5, FILTER_VALIDATE_FLOAT));
echo '<hr>';
//案例3 过滤email格式
$email = 'myexxxx@qq.com';
echo '案例3,过滤email格式结果:';
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
echo '<hr>';
//案例4 过滤array格式
$arr = ['lat' => 22.025, 'lng' => 133.556];
echo '案例4,过滤array格式结果:';
var_dump(filter_var_array($arr, FILTER_VALIDATE_FLOAT));
echo '<hr>';
//案例5 过滤多个外部变量
$formdata = [
'username' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 18, 'max_range' => 120]],
'sex' => FILTER_VALIDATE_BOOLEAN,
];
echo '案例5,表单结果:';
var_dump(filter_input_array(INPUT_GET, $formdata));
echo '<hr>';
变量过滤就是一个验证赋值内容是否符合规则,变量的赋值不符合的时候就给于false反馈。正确时通过正常的值。
应用场景如验证年龄范围、性别范围、邮箱是否正确等。
过滤器 | 功能 |
---|---|
filter_var() | 获取单个变量,进行过滤 |
filter_var_array | 获取多个变量,进行过滤 |
filter_input_array() | 获取外部多个输入,并进行过滤。外部变量类型: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV等 |
- 规则参数是数组形式表示,键名=>值表示