Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:预定义常量, 记住一些常用的基本够用了
函数作用域:使用`function`关键字创建的作用域。
全局作用域:函数之外的变量生效范围,如:$siteName = 'php中文网'
私有变量:定义在函数中的变量 。声明函数变量的同时,就创建了一个函数作用域。
全局变量:定义在函数之外的变量。
超全局变量:也叫预定义变量,访问不受作用域限制。不需要定义,也不需要初始化。超全局变量都要大写,且与$之间有一个下划线。
例如:我们需要访问一个全局作用域中定义的变量,那么我们可以先定义一个私有变量,想要获取这个全局作用域中的数据,但是实际上我们是接收不到返回的这个数据的,这时候,我们就需要架设一个桥梁,间接接收返回数据。这个桥梁就是关键字 global 或者超全局变量。如:
//全局作用域
$siteName = 'php中文网';
//全局变量会自动注册成为超全局变量数组$GLOBALS 的一个值
//超全局变量不受作用域限制,超全局变量都要大写,且与$之间有一个下划线
print_r($GLOBALS['siteName']);
//声明函数:同时也创建一个函数作用域
function getInfo() : string
{
//定义了一个函数"私有变量"
//1.方法 1:global
//global $siteName;
//2.使用超全局变量
$private = $GLOBALS['siteName'];
//函数中可以直接访问超全局变量
echo $_SERVER['SCRIPT_NAME']. '<br>';
return $private;
}
echo getInfo();
echo $_SERVER['SCRIPT_NAME']. '<br>';
$GLOBALS:引用全局作用域中可用的全部变量
$_SERVER:服务器和执行环境信息
$_GET:HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组
$_POST:HTTP POST 请求: 将变量以关联数组形式传入当前脚本
$_FILES:HTTP 文件上传变量,保存着上传文件的全部信息
$_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
$_SESSION:当前脚本可用 SESSION 变量的数组 `$_REQUEST`:默认情况下包含了 `$_GET`,`$_POST` 和 `$_COOKIE` 的数组
$_ENV:通过环境方式传递给当前脚本的变量的数组。
定义在函数中的静态变量使用`static`修饰,并且与函数作用域绑定。
函数中静态变量遵循私有变量约束, 全局不可访问。
局部静态变量:只在函数第一次调用的时候被初始化,以后都不会再被更新了。
静态变量,可以理解为函数中的“伪全局变量”。
实现函数在多次调用的过程中共享数据。
相对的是动态变量,即私有变量,动态变量在函数中每一次都会自动初始化,即值归0,无法在多次调用过程中保持不变。
namespace ns1;
function test1():float
{
static $sum = 0;
$sum = $sum + 1;(此处若使用动态变量,每次加得的结果,只能是1,若使用静态变量,每次加得的结果都递增1.)
return $sum;
}
echo test1(),'<br>';
echo test1(),'<br>';
echo test1(),'<br>';
变量过滤器:就是对变量的验证。如:
给变量年龄一个限制,大于 16 岁,小于 65 岁,这时候就需要使用变量过滤器过滤掉 16 岁和 65 岁以外的数字。
$age = 35;
var_dump(filter_var($age,FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
1.过滤单个变量filter_var()
2.过滤多个变量filter_var_array()
var_dump(filter_var_array([100,'php'],FILTER_VALIDATE_INT));
3.检测是否存在指定的外部变量
var_dump(filter_has_var(INPUT_GET,'page'));
echo '<hr>';
echo 'get变量p = ' . $_GET['p'];
(这种访问方式会让我们遭到攻击,所以需要使用外部变量过滤器。)
4.访问外部变量的过滤器。url中的数据全部都是字符串。
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_arry()
$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)));
PHP常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。
常量名不需要加 $ 修饰符。
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
常量不受作用域限制。
get_defined_constants(): 查看系统所有常量
defined(): 检测常量是否存在
define(): 创建常量
const: 关键字创建常量
constant(): 获取常量值
//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');
echo EMAIL;
}
echo '<hr>';
if(true){
//define('EMAIL','admin@php.cn');
//const EMAIL = 'admin@php.cn';(这个是不正确的,不能这么写)
//echo EMAIL;
}
echo '<hr>';
//const 用在类中,创建类常量
class Demo
{
const HELLO = 'php.cn';
//define('A',100);(define不能用在类里面)
}
echo Demo::HELLO.'<br>';
//echo Demo::A.'<br>';
echo '<hr>';
//常量通常只允许用标量进行初始化
//php7.0+支持数组初始化常量
const DB_LINKS = [
'host' => 'localhost',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
];
echo '<pre>'.print_r(DB_LINKS,true).'</pre>';
echo '<hr>';
//constat()
echo constant('LECTURE').'<br>';
echo LECTURE. '<br>';
$constantName = 'EMAIL';
echo constant($constantName);
echo '<hr>';
define('USER_NAME','其实我也是一个常量');
define('','其实我也是一个常量');
echo '';
echo constant('');
PHP_VERSION : PHP 版本
PHP_MAXPATHLEN : PHP 路径最大长度:1024
PHP_OS_FAMILY : 操作系统:Windows/Darwin/Linux
=PHP_SAPI : web 服务器与 php 之间接口: apache2handler
PHP_EOL : 行尾结束符
PHP_INT_MAX : 最大整数 `9223372036854775807`
PHP_INT_MIN : 最小整数 `-9223372036854775808`
PHP_INT_SIZE : 整数宽度 `8`
PHP_FLOAT_MAX : 最大浮点数`1.7976931348623E+308`
PHP_FLOAT_MIN : 整小浮点数`2.2250738585072E-308`
DEFAULT_INCLUDE_PATH` : 默认 PHP 命令路径
PHP_EXTENSION_DI : 默认 PHP 扩展路径
E_ERROR : 运行时错误: 致命中断
E_PARSE : 语法解析错误: 致命中断
E_NOTICE : 运行时提示: 不中断
E_WARNING : 运行时警告: 不中断
E_ALL : 所有级别错误(除`E_STRICT`)
E_STRICT : 更加严格的错误处理机制,高于`E_ALL`
TRUE : 布尔真
FALSE:布尔假
NULL:空
DIRECTORY_SEPARATOR:目录分隔符
魔术常量,是指常量的值, 会随它们在代码中的位置改变而改变,魔术常量也属于"预定义常量",魔术常量不区分大小写, 但是推荐全部大写。
__LINE__:文件中的当前行号
__FILE__:文件的完整路径和文件名
__DIR__:文件所在目录
__FUNCTION__:当前的函数名称
__CLASS__:当前类名称
__TRAIT__:当前`Trait`名称
__METHOD__:当前类方法名称
__NAMESPACE__:当前命名空间名称
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();