魔术常量可以获取当前文件的路径和ip和文件名等等系统信息
```php
<?php
namespace str1;
//1.变量的作用域
//a.全局作用域
//在函数外定义的变量都是全局变量
$name = 'angle';
$email = 'angle@163.com';
function student(string $email):int{
//b.函数作用域
//在函数内定义的变量作用域只有在函数内部
$age = 32 ;
//如果想在函数内部使用全局变量,必须声明后使用
global $name;
//在函数内部可直接使用超全局变量
echo $_SERVER['SCRIPT_FILENAME'],'<br>';
echo '姓名:',$name,'<br>';
echo '邮箱:',$email,'<br>';
return $age;
}
$age=student($email);
echo '年龄:',$age,'<br>';
//c.超全局变量
//在函数内部和外部都可直接使用,用$GLOBAL声明
//$GLOBAL['name'];//
//使用最多的是系统自定义的超全局变量
echo $_SERVER['SERVER_NAME'],'<br>';
echo '<hr>';
//2.静态变量,使用static声明的变量,一般用在函数中,只有在第一次调用函数时初始化,
function sum()
{
$sum = 0;
$sum = $sum +1;
return $sum;
}
echo sum(),’ ‘;
echo sum(),’ ‘;
echo sum(),’ ‘;
namespace str2;
function sum()
{
//使用static声明后,只在第一次调用时初始化
static $sum = 0;
$sum = $sum + 1;
return $sum;
}
echo sum(),’ ‘;
echo sum(),’ ‘;
echo sum(),’<br>‘;
echo ‘<hr>‘;
//3.变量过虑器
$age = 200;
//a.单个变量过虑filter_var(变量名,过滤器名称或过滤器ID,过滤条件)
$isage = filter_var($age,FILTER_VALIDATE_INT,[‘options’=>[‘min_range’=>’1’,’max_range’=>’120’]]);
if ($isage)
{
echo ‘年龄验证通过<br>‘;
}
else
{
echo ‘年龄验证失败<br>‘;
}
//b.验证多个变量
$isemail = filter_var_array([23,’angle’,’angle123@123.com’],FILTER_VALIDATE_EMAIL);
var_dump($isemail);
echo ‘<br>‘;
//c.验证是否存在指定的外部变量
// INPUT_GET: 表示要检测的是$_GET,就是get参数,其实就是get请求
// INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
$ispag = filter_has_var(INPUT_GET,’page’);
if($ispag)
{
echo ‘有用户提交的变量page<br>‘;//http://localhost/php11/0416/index.php?page=2
}
else
{
echo ‘没有用户提交的变量page<br>‘;//http://localhost/php11/0416/index.php
}
//d. 访问外部变量的过滤器,filter_input
$pagval = filter_input(INPUT_GET,’page’,FILTER_VALIDATE_INT,[‘options’=>[‘min_range’=>1]]);
if($pagval)
{
echo ‘页码正确<br>‘;//http://localhost/php11/0416/index.php?page=2
}
else
{
echo ‘非法页码<br>‘;//http://localhost/php11/0416/index.php?page=-1
}
// e. 同时验证多个外部变量: filter_input_array()
$userval = [
‘username’ => FILTER_SANITIZE_STRING,
‘email’ => FILTER_VALIDATE_EMAIL,
‘age’ =>[‘filter’=>FILTER_VALIDATE_INT,’options’=>[‘min_range’=>’18’]],
‘blog’ => FILTER_VALIDATE_URL
];
echo ‘<pre>‘.var_dump(filter_input_array(INPUT_GET,$userval)).’</pre>‘;
//angle@163.com&age=12&blog=http://www.php.cn"">http://localhost/php11/0416/index.php?username=wangjiao&email=angle@163.com&age=12&blog=http://www.php.cn
echo ‘<hr>‘;
//4.常量
//a.定义常量可以使用defint(‘’,’’) 和const 常量名=常量值来定义
//常量名一般都是大写字母
function test1(){
define('COURSE','PHP');//正确
//const COURSE='PHP';错误 const不能用在函数中
echo '后端课程:',COURSE,'<br>';//可以直接使用常量名获取常量值
}
test1();
if(true)
{
define('COURSE1','HTML');
//const COURSE1='HTML'; 错误//const不能用在流程控制语句中
echo '前端课程:',constant('COURSE1'),'<br>';//也可用constant('常量名')函数获取常量值
}
class stdclass
{
const SEX = 'male';//在类中用const定义类常量
}
echo '性别:',stdclass::SEX,'<br>';
const NAME='angle';//常量只能用标量初始化,标量:数值,字符串,布尔值,null
echo NAME,'<br>';
define('NAME1','Hugn');//不能用在类中常量的定义
echo NAME1,'<br>';
print_r(get_defined_constants(true)['user']);//显示所有用户自定义的常量
// php7.0+支持数组初始化常量
const STUDENT = [
'name'=>'angle',
'sex'=>'male',
'age'=>'32',
'iswork'=>'true'
];
echo '<pre>'.print_r(STUDENT,true).'</pre>';
//b.魔术常量 __魔术常量名__
//魔术常可以在任何位置使用
if(true)
{
echo __DIR__,'<br>';//输出当前文件的路径
}
function test2(){
echo __FILE__,'<br>';//输出当前文件的路径和文件名
}
test2();
class testclass{
const DIRSTR = __FILE__;
}
echo '文件路径:',testclass::DIRSTR;
?>
```