Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:是不是觉得信息量有点大了, 要做好总结 , 其实并不多
序号 | 作用域 | 描述 |
---|---|---|
1 | 函数作用域 | 使用function 关键字创建的作用域 |
2 | 全局作用域 | 函数之外的变量生效范围 |
序号 | 变量类型 | 描述 |
---|---|---|
1 | 私有变量 | 函数中定义的变量 |
2 | 全局变量 | 函数之外定义的变量 |
3 | 超全局变量 | 也叫预定义变量,访问不受作用域限制 |
序号 | 变量名 | 描述 |
---|---|---|
1 | $GLOBALS |
引用全局作用域中可用的全部变量 |
2 | $_SERVER |
服务器和执行环境信息 |
3 | $_GET |
HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组 |
4 | $_POST |
HTTP POST 请求: 将变量以关联数组形式传入当前脚本 |
5 | $_FILES |
HTTP 文件上传变量,保存着上传文件的全部信息 |
6 | $_COOKIE |
通过 HTTP Cookies 方式传递给当前脚本的变量的数组 |
7 | $_SESSION |
当前脚本可用 SESSION 变量的数组 |
8 | $_REQUEST |
默认情况下包含了 $_GET ,$_POST 和 $_COOKIE 的数组 |
9 | $_ENV |
通过环境方式传递给当前脚本的变量的数组 |
<?php
//超全局变量变量不需要定义,也不需要初始化
//变量作用域
$setName = 'php中文网';
//全局变量会自动注册也为超全局变量数组$GLOBAL的一个值
//print_r($GLOBALS['setName']);
//声明函数:同时也创建一个作用域
function getInfo() : string{
//定义一个函数“私有变量”
//方法一:global
//global $setName;
//方法二:定义超全局变量
$private = $GLOBALS['setName'];
//函数中可以直接引用超全局变量
echo $_SERVER['SCRIPT_NAME'].'<br>';
return $private;
}
echo getInfo();
echo $_SERVER['SCRIPT_NAME'].'<br>';
static
修饰,并且与函数作用域绑定0
<?php
# 静态变量
namespace one;
function test(): float
{
// 私有变量,也叫动态变量,在函数中每一次都会自动初始化
// 并且无法在多次调用过程中保持不变
$sum = 0;
$sum = $sum + 1;
return $sum;
}
echo test(), '<br>';
echo test(), '<br>';
echo test(), '<br>';
echo '<hr>';
// 命名空间
// 不同的目录下面可以有相同的文件名
namespace ns2;
// 全局变量
$sum = 0;
function test(): float
{
global $sum;
$sum = $sum + 1;
return $sum;
}
echo test(), '<br>';
echo test(), '<br>';
echo test(), '<br>';
echo '<hr>';
namespace two;
function test(): float
{
// 局部静态变量: 只在函数第一次调用的时候被初始化,以后不会再被更新了
// 静态变量,可以理解为在函数中的"伪全局变量"
// 实现函数在多次调用的过程中共享数据
static $sum = 0;
$sum = $sum + 1;
return $sum;
}
echo test(), '<br>';
echo test(), '<br>';
echo test(), '<br>';
echo '<hr>';
$num1 = 20;
// 变量的本质是数据共享
// 函数的本质是代码共享
echo $num1 + 40;
echo '<br>';
echo $num1 + 20;
echo '<br>';
echo $num1 + 90;
int => 257
boolean => 258
float => 259
validate_regexp => 272
validate_domain => 277
validate_url => 273
validate_email => 274
validate_ip => 275
validate_mac => 276
string => 513
stripped => 513
encoded => 514
special_chars => 515
full_special_chars => 522
unsafe_raw => 516
email => 517
url => 518
number_int => 519
number_float => 520
magic_quotes => 521
add_slashes => 523
callback => 1024
<?php
# 变量过滤器
// foreach (filter_list() as $filter) {
// echo $filter . ' => ' . filter_id($filter) . '<br>';
// }
// echo '<hr>';
// 1. 过滤单个变量filter_var()
// 年龄
$age = 30;
$age = '30';
$age = 68;
var_dump(filter_var($age, FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
echo '<hr>';
$email = 'admin@php.cn';
$email = 'admin@';
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
var_dump(filter_var($email, 274));
echo '<hr>';
// 2. 过滤单个变量filter_var_array()
var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT));
echo '<hr>';
// 3. 检测是否存在指定的外部变量, filter_has_var()
// 对于URL中的查询字符串: 在URL地址?后面的键值对
// php.cn/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 '<hr>';
echo 'get变量p = ' . $_GET['p'];
echo '<hr>';
// 4. 访问外部变量的过滤器,filter_input
var_dump(filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]));
// echo filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]) ? '页码OK': '页码非法';
// 5. 同时验证多个外部变量: filter_input_array()
echo '<hr>';
$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));
/*
常量命名的要求和变量一样,但是约定俗成的规则(最好这样用):全大写
下面是定义一个名为π的常量
*/
//常量也是超全局的
define('PAI',3.1415926);
// 常量是不用加$符的,加了就要出问题!
echo PAI; //3.1415926
<?php
# 定义常量
// define()函数
define('LECTURE', '朱老师');
// const 关键字
const COURSE = 'PHP';
// 常量不受作用域限制
function test1()
{
echo LECTURE . '教: ' . COURSE . '<br>';
define('SEX', '男');
echo SEX . '<br>';
// const不能用在函数中
// const AGE = 30;
// echo AGE;
}
test1();
echo '<hr>';
// 流程控制中,define能用, const不能用
if (true) {
define('EMAIL', 'admin@php.cn');
// const EMAIL = 'admin@php.cn';
// echo EMAIL;
}
// const用在类中,创建类常量
class Demo
{
const HELLO = 'php.cn';
// define('A', 100);
}
echo Demo::HELLO.'<br>';
// echo Demo::A.'<br>';
// 常量通常只允许用标量进行初始化
// 标量: 单值变量, 字符串, 数值,布尔, null
// php7.0+支持数组初始化常量
const DB_LINKS = [
'host'=>'localhost',
'username'=>'root',
'password'=>'root',
'charset'=>'utf8',
];
echo '<pre>'.print_r(DB_LINKS,true).'</pre>';
// constant()
echo constant('LECTURE'). '<br>';
echo LECTURE. '<br>';
$constantName = 'EMAIL';
echo constant($constantName);
echo '<hr>';
define('USER_NAME', '其实我也是一个常量');
define('', '其实我也是一个常量');
echo '';
echo constant('');
注意:“FILE” “LINE ” “CLASS” “METHOD_” 中的“”是指两个下划线,不是指一个下划线。
<?php
# 魔术常量
echo '当前行号: ' . __LINE__ . '<br>';
echo '当前文件: ' . __FILE__ . '<br>';
echo '当前目录: ' . __DIR__ . '\demo6.php<br>';
function hello123()
{
echo __FUNCTION__;
}
hello123();
echo '<hr>';
class D
{
public function index()
{
echo __METHOD__;
}
}
(new D)->index();
php学习有难记忆的,理解记忆还是容易很多