变量
一、数据类型:
数据类型 | 详细数据类型 |
---|---|
基本类型 | string、(int、folat)、Boolean(true、false) |
符合类型 | class、array |
特殊类型 | NULL、resource(资源) |
二、变量作用域(php中没有块作用域)
1、全局作用域:函数之外的作用域
2、函数作用域:使用function关键字创建的作用域
3、根据变量作用域不同变量分为:
变量类型 | 描述 |
---|---|
私有变量 | 函数中定义的变量 |
全局变量 | 函数之外定义的变量 |
超全局变量 | 也叫预定义变量,访问不受作用域限制 |
三、静态变量(与之相对应:私有变量也叫动态变量,函数每一次调用访问都会被初始化;)
1、静态变量有关键字:static 声明定义;
2、在函数中的静态变量,定义时必须初始化(只能初始化一次且不能更新,默认值为0;);并且和函数作用域绑定
3、函数执行完毕时(离开函数作用域),静态值不丢失;可在函数多次调用中保持不变
4、函数中静态变量遵循私有变量约束,外部不可访问;
四、超全局变量
1、超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问;
2、常见的超全局变量:
变量名 | 描述 |
---|---|
$GLOBALS |
引用全局作用域中可用的全部变量 |
$_SERVER |
服务器和执行环境信息 |
$_GET |
HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组 |
$_POST |
HTTP POST 请求: 将变量以关联数组形式传入当前脚本 |
$_FILES |
HTTP 文件上传变量,保存着上传文件的全部信息 |
$_COOKIE |
通过 HTTP Cookies 方式传递给当前脚本的变量的数组 |
$_SESSION |
当前脚本可用 SESSION 变量的数组 |
$_REQUEST |
默认情况下包含了 $_GET ,$_POST 和 $_COOKIE 的数组 |
$_ENV |
通过环境方式传递给当前脚本的变量的数组 |
五、常量
1、常量(推荐使用大写字符和下划线):与变量相比常量前面没有$
符号;常量创建时必须初始化且禁止更新和删除;常量不受作用域限制
2、相关函数和关键字:
a、查询系统所有常量:get_defined_constants();
设置参数true分组打印,自定义常量在user分组中
b、查询常量是否存在:defined();
返回布尔值
c、定义顶常量:define();
和关键字const
声明定义(const关键字定义常量无法在函数中和流程控制中使用)
d、获取常量值:constant();
3、常量:预定义常量(魔术常量)
1、常见预定义常量
序号 | 预定义常量 | 描述 |
---|---|---|
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 |
目录分隔符 |
2、魔术常量
序号 | 魔术常量 | 描述 |
---|---|---|
1 | __LINE__ |
文件中的当前行号 |
2 | __FILE__ |
文件的完整路径和文件名 |
3 | __DIR__ |
文件所在目录 |
4 | __FUNCTION__ |
当前的函数名称 |
5 | __CLASS__ |
当前类名称 |
6 | __TRAIT__ |
当前Trait 名称 |
7 | __METHOD__ |
当前类方法名称 |
8 | __NAMESPACE__ |
当前命名空间名称 |
代码练习
1、代码:
<?php
$name='ldy';
echo $GLOBALS["name"];
// echo '<pre>'.print_r($GLOBALS,true).'</pre>';
function sum(){
// 私有变量
$city='河南';
// global $name;
// return $name;
// $GLOBALS 超全局变量
return $GLOBALS['name'].'是'.$city;
}
echo sum();
echo '<br>';
echo print_r($_SERVER['SCRIPT_NAME'],true);
echo '<hr>';
// 静态变量演示
function get_count(){
static $n=0;
$n++;
return $n;
}
echo get_count();
echo '<br>';
echo get_count();
echo '<br>';
echo get_count();
// 过滤器
echo '<hr>';
$num1=41;
echo filter_var($num1,FILTER_VALIDATE_INT,["options"=>['min_range'=>18,'max_range'=>45]]);
$email='ldy@php.cn';
echo filter_var($email,FILTER_VALIDATE_EMAIL);
echo '<br>';
$a=1;
$b="a";
print_r(filter_var_array([$a,$b],FILTER_VALIDATE_INT));
echo '<br>';
var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT));
echo '<br>';
// 检测是否存在指定的外部变量:返回布尔值
var_dump( filter_has_var(INPUT_GET,'p'));
echo '<hr>';
echo filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,['options'=>['min_range'=>1,'max_range'=>30]]) ? '页码正确':'页码不能超过30';
$user=[
'email'=>FILTER_VALIDATE_EMAIL,
'age'=>['filter'=>FILTER_VALIDATE_INT,'flags'=>FILTER_REQUIRE_SCALAR,'options'=>['min_range'=>18,'max_range'=>100]],
'blog'=>FILTER_VALIDATE_URL
];
echo '<pre>'.print_r(filter_input_array(INPUT_GET,$user),true).'</pre>';
// 常量
echo '<hr>';
// echo '<pre>'.print_r(get_defined_constants(true),true).'</pre>';
define('ABC',__FILE__);
echo ABC.'<br>';
echo __DIR__;
const COUSER="php";
echo '<hr>';
class AbC
{
const DOC='PHP';
function getName(){
define('BOC','我是一个常量');
return BOC;
}
}
echo __LINE__.'<br>';
echo AbC::DOC;
echo (new AbC)->getName();
echo '<br>';
// dirname(__FILE__)和__DIR__
echo dirname(__FILE__);
2、运行结果
总结
1、变量的作用域:函数作用域
2、超全局变量、常量不受作用域限制
3、超全局变量和魔术常量需要强制记忆;实战使用率较高!
4、静态变量常用来统计页面浏览次数和函数次数;
5、过滤器在网站实战中比较重要!