批改状态:合格
老师批语:看得出,你在补作业, 加油
1)在定义后后还可以多次赋值
2)可以通过unset()销毁
3)变量名区分大小写
4)变量名必须使用 “$“作为开始
5)变量名/标示符 必须使用字母或下划线开始,后面允许使用数字,“_” “[a~z,A~Z]”,”[0~9]”
1) 常量前面面没有$符号
2) 常量只能通过define()函数定义或者是const关键字定义(php5.3后),且值只能是标量,即可以是 整型 浮点型 布尔型 null字符串等。
3) 在定义后,无论在哪定义,都可以直接调用,没有作用域。
4) 定义后不可以再赋值一直存在内存中,不能被销毁。
常量的创建有关键字const和函数创建,
关键字const
const APP_PATH = '/phpstudy_pro';
函数创建
define('APP_NAME','客户管理系统');
常量可以以下两种方式获取
方式1;
echo 'APP_PATH';
方式2;
echo constant('APP_PATH');
推荐使用方式2。
因为当出现以下情况时,
$name = 'APP_PATH';echo $name;
获取的APP_PATH,会显示APP_PATH字符串,而不会显示APP_PATH = ‘/phpstudy_pro’的值。
而通过constant来获取,便可以。
echo constant($name);
要记住使用常量名的变量化,只能使用函数来获取。
//创建变量$username = 'admin';//访问变量echo $username,'<hr>';
PHP 过滤器用于验证和过滤来自非安全来源的数据。测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。通过使用过滤器,您能够确保应用程序获得正确的输入类型。
外部数据有;
1.来自表单的输入数据
2.Cookies
3.Web services data
4.服务器变量
5.数据库查询结果
接下来写几个常用函数及其实际演示实例
filter_var() :通过一个指定的过滤器来过滤单一的变量
FILTER_VALIDATE_INT:判断值是否为整数
代码如下:
//创建变量age,并赋值$age = 44;//创建变量options,做判断语句$options = ['min_range'=>18,'max_range'=>60];//过滤var_dump(filter_var($age,FILTER_VALIDATE_INT, $options));echo '<hr>';
$email = 'admin@qq.com';//当邮箱格式不正确时,报错// $email = 'admin@qq';var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));//274也是邮箱验证的变量过滤器,可以查手册var_dump(filter_var($email,274));
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
//创建变量a,b,并赋值$a = 10;$b = 90;//判断变量a,bvar_dump(filter_var_array([$a,$b],FILTER_VALIDATE_INT));echo '<hr>';
//外部变量,不在当前脚本创建的变量,例如,get,post//filter_input()// 以这个URL为例,https://192.168.64.3/dashboard/0815/demo15.php?id=30// ?id=30查询字符串,通过 "GET" 方法传送的输入变量idecho $_GET['id'];//filter_input(输入类型get/post,字符串表示的变量名,过滤器,选项参数)// 当网页网址为192.168.64.3/dashboard/0815/demo15.php?id=30时$options = ['min_range'=>1];var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT, $options));
$args = ['username' => FILTER_SANITIZE_STRING,'email' => FILTER_VALIDATE_EMAIL,'age' => ['filter' => FILTER_VALIDATE_INT,'options' =>['min_range'=>18,'max_range'=>60]],'blog' => FILTER_SANITIZE_URL,];var_dump(filter_input_array(INPUT_GET,$args));
函数的返回值方式有单值返回和多值返回。
函数必有返回值,且只能有一个返回值,这叫单值返回。
可以通过以下几种方式实现多值返回(间接返回实现)。
//创建函数demo1,并设为字符串类型function demo1():string{//创建变量 status和message,并赋值$status = 1;$message = 'success';//返回return $status . ',<span style ="color :red;"></span>' . $message . '</span>';}//打印函数demo2echo demo1(),'<hr>';
//创建函数demo2,并设为字符串类型function demo2(): array{//创建变量 status和message,并赋值$status = 1;$message = 'success';//返回return ['status' => $status,'message' => $message];}//打印数组,是将数据拆分成两个字符串echo implode(', ', demo2()),'<hr>';//打印函数demo2echo print_r(demo2(),true),'<hr>';
//创建函数demo3,并设为字符串类型function demo3(): string{//创建变量 status和message,并赋值$status = 1;$message = 'success';// 将数组进行json编码,返回json格式的字符串return json_encode(['status' => $status,'message' => $message]);}echo demo3(),'<hr>';
序列化,是将变量的值转为字符串表示,可以很方便的存储或传输。
function demo4(): string{$status = 1;$message = 'success';// 将数组进行json编码,返回json格式的字符串return serialize(['status' => $status,'message' => $message]);}$str = demo4();echo $str;$arr = unserialize($str);print_r($arr);
function demo1(float $arg) : float{ //在函数中对参数的改变,不会映射到外部的参数return $arg *= 2;}$var = 100;//打印函数demo1内的返回值echo demo1($var),'<br>';//打印变量var,因为在函数中对参数的改变,不会映射到外部的参数,依旧打印出100echo $var,'<hr>';
在参数前添加取地址符 & ,如下的&$arg就是引用参数。
引用参数的情况喜爱,在函数中对参数的改变,会映射到外部的参数
function demo2(float &$arg) : float{//在函数中对参数的改变,会映射到外部的参数return $arg *= 2;}$var = 100;//打印demo2,为200echo demo2($var),'<br>';//打印var,为200echo $var,'<hr>';
//$opt = '+'。设置opt默认参数为 +function demo3(float $a,float $b,string $opt = '+'):string{switch($opt){case '+':return sprintf('%d + %d = %d',$a,$b,($a + $b));break;case '-':return sprintf('%d - %d = %d',$a,$b,($a - $b));break;case '*':return sprintf('%d * %d = %d',$a,$b,($a * $b));break;case '/':if($b !== 0)return sprintf('%d / %d = %f',$a,$b,($a / $b));else die('0 is bad');break;default:die('非法操作符');}}// 10 + 20 = 30echo demo3(10,20,'+'),'<br>';//opt默认参数为 + ,所以依旧 10 + 20 = 30echo demo3(10,20),'<br>';// @没有出现在判断语句中,而打印出非法操作符echo demo3(10,0,'@'),'<br>';// 10 - 20 = -10echo demo3(10,20,'-'),'<br>';
在没有学习剩余参数的情况下
我们通常是这样实现数字相加的
//简单用法//3个数的相加算法function demo4($a,$b,$c){return $a + $b + $c;}echo demo4(39,22,30),'<br>';echo '<hr>';//复杂用法//多个数的相加算法function demo5(){// print_r(func_get_args());return array_sum(func_get_args());}echo demo5(12,31,4134,5325,132);
用复杂用法,来计算可以,但对后期维护不好,而且代码可读性也差
那就用…rest, …spread语法
…rest语法:在变量加上…就成了剩余参数
…spread:用在调用时的参数中,用在有具体值的参数列表,实参
// ..rest用法//在变量$args加上...就成了剩余参数,...$argsfunction demo6(...$args){// print_r($args);return array_sum($args);}echo demo6(12,31,4134,5325,132);//可以进行多个数的运算。// ...rest ...spread混合一起用//变量$args为剩余参数function demo7(...$args){//返回变量$args的相加值return array_sum($args);}//创建数组data,并赋值$data = [12,33,454,54,34,34];//...spread用在调用时的参数中,用在有具体值的参数列表,实参echo demo7(...$data);//也可以不创建数组,直接输入echo demo7(...[12,33,454,54,34,34]);
直接调用函数(同步调用),有一个致命缺点,就是他是按照顺序调用的,也就是调用语句不执行完成,后面的语句就不会被执行。
如果出现要引用国外网站的数据,由于网络原因,导致读取数据过慢,或者引用很卡的服务器内的内容,那就卡住了。
为了防止这个情况的发生,我们就可以用回调的方式来请求函数了。
!!!!!回调函数是异步执行的重要工具!!!!!!
function demo1($a,$b,$c){return $a + $b + $c;}//直接调用echo demo1(1,2,3),'<br>';//以回调的方式来请求函数echo call_user_func('demo1',1,2,3);echo call_user_func_array('demo1',[1,2,3]);//创建变量data数组,并赋值$data =range(1,100);//创建变量arr,并通过判断语句,选出0到100之间的偶数。$arr = array_map(function($item){// % 取模/取余if($item % 2 === 0) return $item;},$data);//array_filter() 函数用回调函数过滤数组中的元素,$arr =array_filter($arr,function($item){return $item;});//简化$arr =array_filter($arr);print_r($arr);
在php中不允许在同一个命名空间中声明同名函数的,js可以,
下列代码同一个命名空间中声明了相同函数demo1,
导致报错。
function demo1(){return __FUNCTION__;}echo demo1();echo '<br>';function demo1(){return __FUNCTION__;}echo demo1();echo '<br>';
但可以在不同命空间中声明同名函数
//ns1命名空间namespace ns1;function demo1(){return __FUNCTION__;}echo demo1();echo '<hr>';//ns2命名空间namespace ns2;function demo1(){return __FUNCTION__;}echo demo1();
打印ns1\demo1<hr>ns2\demo1成功
字符串的四种创建方式分别是
$str = 'string';//单引号的变量不能被解析出来echo 'This is a $str hello world';echo '<br>';echo '<hr>';//通过字符串与变量来拼接,后输出echo 'This is a '.$str.' hello world';// 单引号的特殊字符不能被解析,原样输出echo 'hello \n\r world .<br>';echo '<hr>';//单引号其实有两重意义:1.本义就是字符。2.字符串的定界符//单引号中又出现单引号,必须使用转义符:\echo 'this is a \'test\'.<br>';echo '<hr>';// 如果又出现转义符:\,应该连续写两个才可以正常输出,否则就是转义echo 'this is \'\\test\' world';echo '<hr>';
// 双引号中的变量能被解析出来echo "This is a $str hello world";echo '<hr>';//为了更加清晰的表示出此为变量,用{$str}或 ${str}这样在变量后加其他东西也不会混淆echo "This is a {$str} hello world.<hr>";//${var}与es6中的模版字符串语法相同echo "This is a ${str} hello world.<hr>";// 双引号的特殊字符能被解析,多个空格,或回车在页面中视为一个echo "hello \n\r world.<hr>";echo "hello \n\n\n\r\r\r world.<hr>";echo "this is \"demo\" . <hr>";
可以当作双引号的plus+,可以解析变量,双引号不需要转义,非常适合php+html模版
$hello = 'rinki.me';echo "<p>hello <span style=\"color:red\">$hello</span></p>";echo <<< HELLO<p>hello <span style="color:red">$hello</span></p>HELLO;
// 也可以在heredoc的起始标示符添加双引号echo <<< "HELLO"......HELLO;
可以当作单引号的plus+,适合大段的纯文本,不适合内嵌变量,或者特殊字符的文本
echo 'this is text';echo <<< 'abc'this is textthis is textthis is textthis is textthis is textabc;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号