php %3c%3c%3c 解析常量,PHP基础知识小结1

1.变量与常量的区别与创建,访问方式

变量与常量的区别

变量是临时存储数据的容器,是实现数据服用的手段。变量分为全局变量,私有变量,和超全局变量,除超全局变量外,其他变量受作用域限制。变量必须以$作为开始,变量名区分大小写

常量创建必须给定一个值,一旦被定义就无法再更改,通常用大写表示。常量不受作用域限制

变量与常量的创建

变量名必须以$作为开始,不允许使用特殊字符,数字作为变量的开始,必须使用字母或下划线开始,后面允许使用数字

常量的创建分为两种:关键字 const 创建,define() 函数创建,在类中,类的常量只能用 const 创建

//变量

$str='这是一个变量';

//常量,一旦定义就无法更改

constAPP_NAME='demo';

define('APP_ID',110);

classDemo{

constCLASS_NAME='Demo';

}

$name='APP_NAME';

变量与常量的访问方式

变量和常量都可以使用 echo 直接输出 echo 没有返回值,效率最高,常量的变量化,只能使用constant()函数来获取

//输出变量$a

echo $str;

echo'
';//换行

//访问常量

echo APP_NAME;

echo'
';

echo APP_ID;

echo'
';

//访问类中的常量

echoDemo::CLASS_NAME;

// 常量名的变量化,只能使用函数来获取

echo constant($name);

代码执行结果如下:

1b3c166051bd7203decd75ab3856de86.png

2.变量过滤器的常用函数与用法

变量过滤器的常用函数主要有:

filter_list()用来获取过滤器名称

filter_id()用来获取过滤器 ID,参数是过滤器名称

fliter_var() filter_var_array()分别用来过滤单个和多个变量

filter_has_var()用于检测是否存在某个外部变量

filter_input() filter_input_array()分别用于过滤单个和多个外部变量

外部变量类型: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV

过滤器主要分为两大类: 验证过滤器,清理过滤器

验证过滤器:主要用于数据类型和格式的验证

清理过滤器:主要用于去掉非法字符,保留指定字符

//1.返回过滤器的名称

echo'


';

echo'

';

print_r(filter_list());

//2.返回过滤器的ID filter_id(过滤器的名称)

echo'


';

var_dump(filter_id('validate_email'));

echo"
";

var_dump(filter_id('int'));

echo'

';

// 3.过滤单个变量 filter_var()

echo'


';

// 在验证范围内的变量

$num1=88;

// 在验证范围外的变量

$num2=101;

$option=['options'=>['min_range'=>1,'max_range'=>100]];

var_dump(filter_var($num1,FILTER_VALIDATE_INT,$option));

echo"
";

var_dump(filter_var($num2,FILTER_VALIDATE_INT,$option));

echo'


';

//4.过滤多个变量

//不符合验证规则变量

$var1=100;

$var2='abc';

//符合验证规则变量

$var3=666;

$var4=888;

//验证不通过将返回false

var_dump(filter_var_array([$var1,$var2],FILTER_VALIDATE_INT));

echo"
";

var_dump(filter_var_array([$var3,$var4],FILTER_VALIDATE_INT));

echo"


";

//5.检查是否存在指定变量filter_has_var()

//http://edu.std.com/demo2.php?var1=test

//当前请求只有一个参数

var_dump(filter_has_var(INPUT_GET,'var1'));//返回true

echo"
";

var_dump(filter_has_var(INPUT_GET,'var2'));//返回false

// 6.验证过滤外部变量filter_input()

//http://edu.std.com/demo3.php?name=%3Cspan%3Etest%3C/span%3E

//FILTER_SANITIZE_STRING 清理过滤器

var_dump(filter_input(INPUT_GET,'name',FILTER_SANITIZE_STRING));

echo'


';

//7.批量验证过滤外部变量filter_input_array()

$args=[

'name'=>FILTER_SANITIZE_STRING,//清理过滤器,清理字符串中的非法字符

'age'=>['filter'=>FILTER_VALIDATE_INT,'options'=>['min_range'=>18,'max_range'=>60]],

'email'=>FILTER_VALIDATE_EMAIL,//验证过滤器,验证邮箱格式

'is_married'=>FILTER_VALIDATE_BOOLEAN,//验证过滤器,验证布尔值

'test_url'=>FILTER_VALIDATE_URL//验证过滤器,验证URL格式

];

echo"

";

//http://edu.std.com/demo3.php?name=%3Cspan%3Edemo%3C/span%3E&age=200&email=1451535153qq.cpm&is_married=%E6%98%AF&test_url=edu.std.com/demo3.php

//非合法数据传值

var_dump(filter_input_array(INPUT_GET,$args));

/*array(5) {

["name"]=>

string(4) "demo"

["age"]=>

bool(false)

["email"]=>

bool(false)

["is_married"]=>

bool(false)

["test_url"]=>

bool(false)

}*/

//http://edu.std.com/demo3.php?name=demo&age=20&email=1451535153@qq.cpm&is_married=1&test_url=http://edu.std.com/demo3.php

var_dump(filter_input_array(INPUT_GET,$args));

/*

array(5) {

["name"]=>

string(4) "demo"

["age"]=>

int(20)

["email"]=>

string(17) "1451535153@qq.cpm"

["is_married"]=>

bool(true)

["test_url"]=>

string(28) "http://edu.std.com/demo3.php"

}

*/

代码执行结果:

b39234975821c954a55183642d6655de.png

bb17d784384f5f0bae0119f6ddafb3f6.png

6b6de9cb8c898f0fe97e62f1035bda43.png

3.函数的类型

内置函数:系统给用户提前写好的,可以开箱即用,不需要也不允许再申明

自定义函数:用户根据项目需求自己写的

可变函数:将函数名称放在一个变量中进行引用

匿名函数:没有函数名称,匿名函数也被叫做闭包

//1.系统函数/内置函数

var_dump(111);//用于打印数据,并输出数据类型

echo'


';

//2.自定义函数

functiongetStr(float$money,float$discount){

$pay=$money*$discount;

$str='原价:'.$money.' 元,实际支付 '.$pay.' 元
';

return$str;

}

echo getStr(1000,0.8);

echo'


';

// 3.可变函数:将函数名称放在一个变量中进行引用

$funcName='getStr';

echo $funcName(5000,0.6);

echo'


';

// 4. 匿名函数

$getStr=function(float$money,float$discount){

$pay=$money*$discount;

$str='原价:'.$money.' 元,实际支付 '.$pay.' 元
';

return$str;

};//匿名函数不是代码块需要加分号结束

echo $getStr(4000,0.8);

echo'


';

// 闭包函数,可以访问上一级空间的成员

$discount=0.6;

// 访问上一层空间的$discount

$str=function(float$money)use($discount){

$pay=$money*$discount;

return'原价:'.$money.' 元,实际支付 '.$pay.' 元
';

};

echo $str(10000);

echo'


';

$srting=function($discount){

// 使用上一层的$discount

// 子函数全局不可见,只有父函数可见

returnfunction(float$money,int$num)use($discount){

$p=$money*$num;

$pay=$p*$discount;

return'原价:'.$p.' 元,实际支付 '.$pay.' 元
';

};

};

$pay=$srting(0.8);

echo $pay(500,8);//通过父函数访问子函数

echo $srting(0.8)(500,8);

代码执行结果如下:

9838934f3210f9a898679e7ae22c3702.png

4.函数的返回值方式

函数必定有返回值,函数只支持单值返回,可以以下方式实现多值返回:

通过字符串拼接返回多值

通过数组返回

通过 json 字符串返回

通过将返回值序列化成字符串返回多值

// 1.通过自负窜拼接返回多值

functionres1(){

$status=0;

$msg='success';

return$status.' => '.$msg.'
';

}

echo res1();

echo'


';

// 2.通过数组的方式返回多值

functionres2(){

$status=0;

$msg='success';

$arr=['status'=>$status,'msg'=>$msg];

$str=implode(" => ",$arr);

return$str;

}

echo res2();

echo'


';

// 3.通过json格式化字符串返回多值

functionres3(){

$status=0;

$msg='success';

$arr=['status'=>$status,'msg'=>$msg];

returnjson_encode($arr);

}

echo res3();

echo'


';

// 4.通过将返回值序列化返回多值

functionres4(){

$status=0;

$msg='success';

$arr=['status'=>$status,'msg'=>$msg];

returnserialize($arr);

}

echo res4();

代码执行结果如下:

c94d2325b1a8be7d2799ae109975f997.png

5.函数的参数

函数的参数主要分为 4 种:值传递参数,引用参数,默认参数,剩余参数

//函数的参数

// 1.值参数:值传递参数(默认方式)

functiondemo1(int$argc){

// 函数中对参数的操作不影响外部参数的值

return$argc+=10000;

}

echo demo1(100),'
';

echo'


';

// 2.应用参数,在参数前添加地址符 : &

functiondemo2(int&$argc){

// 函数中对参数的操作会改变外部参数的值

return$argc+=10000;

}

$var=100;

echo demo2($var),'
';

echo $var,'
';//10100

echo'


';

// 3.默认参数

functiondemo3(int$argc,int$num=1000){

return$argc+=$num;

}

$var=100;

echo demo3($var),'
';//第二个参数不传值,默认使用默认参数1000

echo demo3($var,3000);

echo'


';

//4.剩余参数 ...rest /...spread

//...$args 将传入的参数全部放入到一个素组$args中

functiondemo4(...$args){

// 计算数组值的和

returnarray_sum($args);

}

// 传入值是多个参数

echo demo4(2,3,4,5,6),'
';

functiondemo5(...$args){

returnarray_sum($args);

}

$data=[2,3,4,5,6];

// ...spread 将数组参数打散

echo demo5(...$data);

代码执行结果如下:

a29ee92d8365a5d9562c157b10e07c88.png

6.函数的回调执行方式

回调函数是异步执行的重要工具,用call_user_func() 和call_user_func_array() 来回调函数

// 回调函数

functiondemo1(...$args){

returnarray_sum($args);

}

functiondemo2(){

sleep(5);

return'5s later
';

}

// 以回调的方式来执行一个函数

echo call_user_func('demo1',2,3,4,5,6);

echo'
';

echo call_user_func_array('demo1',[2,3,4,5,6]);

echo'
';

echo call_user_func('demo2');//demo2 执行长时间过程,不影响后续代码的执行

echo'sleep 5';

echo'


';

$data=range(1,50);

// 将数组的值 *2 处理

$arr=array_map(function($item){

return$item*=2;

},$data);

print_r($arr);

代码执行结果如下:

a3e7e8ea8ef76b5f545210ef5f7d72a3.png

c2e031eb389d4c268dfcea80c205a3da.png

7.函数的命名空间

php 中不允许在同一个命名空间中声明同名函数

//命名空间

namespacens1;

functiondemo1(){

return'命名空间 '.__NAMESPACE__.' 的方法 '.__FUNCTION__;

}

echo demo1();

echo'


';

namespacens2;

functiondemo1(){

return'命名空间 '.__NAMESPACE__.' 的方法 '.__FUNCTION__;

}

echo demo1();

echo'
';

// 在ns2中调用ns1中的demo1()

echo \ns1\demo1();

代码执行结果如下:

2fb998d043519ef42eeea1247572aa89.png

8.字符串的四种创建方式与应用场景数

字符串创建的方式有四种:单引号,双引号,heredoc,nowdoc;

单引号:单引号中的特殊字符,变量不能被解析,变量只能通过与字符串组合后输出,如果单引号中又出现单引号,必须使用转义符进行转义

双引号: 可以解析特殊字符和变量,多个空格或者回车在页面中被视为 1 个,如果双引号中出现双引号,必须使用转义符进行转义

heredoc: 双引号的升级本,可以解析变量,且双引号不需要被转义,使用于写 php+html 模版

nowdoc: 单引号的升级版,适合大段的存文本,不适合内嵌变量和特殊字符的文本

// 1.单引号 ''

$str='string';

// 单引号中变量不能被解析

echo'This is a $str demo.
';

// 通过和变量拼接来解析变量

echo'This is a '.$str.' demo.
';

//特殊字符 \r\n原样输出,不能被解析

echo'This is \r\n a demo.
';

// 单引号中出现单引号,必须使用 \ 转义

echo'This is a \'sting\' demo.
';

//输出一个\

echo'This is a \\ demo';

echo'


';

// 2.双引号 ""

// 双引号中变量被解析

echo"This is a {$str} demo.
";

// 双引号的特殊字符能被解析

echo"This is a \r\n demo.
";

// 双引号中出现双引号,必须使用 \ 转义

echo"This is a \"string\" demo.
";

echo'


';

// 3.heredoc

$username='username';

//可以解析变量,且双引号不需要转义,适用于写html模版

echo<<

用户登录

用户名:

密码:

登录

EOF;

echo'
';

// 4.nowdoc

// nowdoc 的起始标签必须加单引号

echo<<

Thisisalong{$str}
Thisisa \r\n
Thisisalongstring

Thisisalongstring

EOF;

// nowdoc不解析变量,适合写大段文本

代码执行结果如下:

a264850fe71d347399fc1a98f3264749.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值