Blogger Information
Blog 5
fans 0
comment 0
visits 4490
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【php开发】之php变量知识,流程控制与函数详解
林辉
Original
485 people have browsed it

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

1.1 变量与常量的区别

1.1.1 变量特点:

1)在定义后后还可以多次赋值
2)可以通过unset()销毁
3)变量名区分大小写
4)变量名必须使用 “$“作为开始
5)变量名/标示符 必须使用字母或下划线开始,后面允许使用数字,“_” “[a~z,A~Z]”,”[0~9]”

1.1.2 常量特点

1) 常量前面面没有$符号
2) 常量只能通过define()函数定义或者是const关键字定义(php5.3后),且值只能是标量,即可以是 整型 浮点型 布尔型 null字符串等。
3) 在定义后,无论在哪定义,都可以直接调用,没有作用域。
4) 定义后不可以再赋值一直存在内存中,不能被销毁。

1.2 变量与常量的创建与访问方式

1.2.1常量的创建

常量的创建有关键字const和函数创建,

关键字const

  1. const APP_PATH = '/phpstudy_pro';

函数创建

  1. define('APP_NAME','客户管理系统');

1.2.2 常量的访问方式

常量可以以下两种方式获取
方式1;

  1. echo 'APP_PATH';

方式2;

  1. echo constant('APP_PATH');

推荐使用方式2。
因为当出现以下情况时,

  1. $name = 'APP_PATH';
  2. echo $name;

获取的APP_PATH,会显示APP_PATH字符串,而不会显示APP_PATH = ‘/phpstudy_pro’的值。
而通过constant来获取,便可以。

  1. echo constant($name);

要记住使用常量名的变量化,只能使用函数来获取。

1.2.3 变量的创建与访问方式

  1. //创建变量
  2. $username = 'admin';
  3. //访问变量
  4. echo $username,'<hr>';

2. 变量过滤器的常用函数与用法(实际演示)

PHP 过滤器用于验证和过滤来自非安全来源的数据。测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。通过使用过滤器,您能够确保应用程序获得正确的输入类型。
外部数据有;

1.来自表单的输入数据
2.Cookies
3.Web services data
4.服务器变量
5.数据库查询结果

接下来写几个常用函数及其实际演示实例

2.1 filter_var()

filter_var() :通过一个指定的过滤器来过滤单一的变量
FILTER_VALIDATE_INT:判断值是否为整数
代码如下:

  1. //创建变量age,并赋值
  2. $age = 44;
  3. //创建变量options,做判断语句
  4. $options = ['min_range'=>18,'max_range'=>60];
  5. //过滤
  6. var_dump(filter_var($age,FILTER_VALIDATE_INT, $options));
  7. echo '<hr>';

2.2 验证输入

  1. $email = 'admin@qq.com';
  2. //当邮箱格式不正确时,报错
  3. // $email = 'admin@qq';
  4. var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
  5. //274也是邮箱验证的变量过滤器,可以查手册
  6. var_dump(filter_var($email,274));

2.3 filter_var_array()

filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量

  1. //创建变量a,b,并赋值
  2. $a = 10;
  3. $b = 90;
  4. //判断变量a,b
  5. var_dump(filter_var_array([$a,$b],FILTER_VALIDATE_INT));
  6. echo '<hr>';

2.3 验证外部变量

2.3.1 同时验证单个外部变量

  1. //外部变量,不在当前脚本创建的变量,例如,get,post
  2. //filter_input()
  3. // 以这个URL为例,https://192.168.64.3/dashboard/0815/demo15.php?id=30
  4. // ?id=30查询字符串,通过 "GET" 方法传送的输入变量id
  5. echo $_GET['id'];
  6. //filter_input(输入类型get/post,字符串表示的变量名,过滤器,选项参数)
  7. // 当网页网址为192.168.64.3/dashboard/0815/demo15.php?id=30时
  8. $options = ['min_range'=>1];
  9. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT, $options));

2.3.2 同时验证多个外部变量

  1. $args = [
  2. 'username' => FILTER_SANITIZE_STRING,
  3. 'email' => FILTER_VALIDATE_EMAIL,
  4. 'age' => ['filter' => FILTER_VALIDATE_INT,'options' =>['min_range'=>18,'max_range'=>60]],
  5. 'blog' => FILTER_SANITIZE_URL,
  6. ];
  7. var_dump(filter_input_array(INPUT_GET,$args));

3. 实例演示函数的返回值方式

函数的返回值方式有单值返回和多值返回。
函数必有返回值,且只能有一个返回值,这叫单值返回。
可以通过以下几种方式实现多值返回(间接返回实现)。

3.1 通过字符串拼接返回多值

  1. //创建函数demo1,并设为字符串类型
  2. function demo1():string
  3. {
  4. //创建变量 status和message,并赋值
  5. $status = 1;
  6. $message = 'success';
  7. //返回
  8. return $status . ',<span style ="color :red;"></span>' . $message . '</span>';
  9. }
  10. //打印函数demo2
  11. echo demo1(),'<hr>';

3.2 通过数组返回多值

  1. //创建函数demo2,并设为字符串类型
  2. function demo2(): array
  3. {
  4. //创建变量 status和message,并赋值
  5. $status = 1;
  6. $message = 'success';
  7. //返回
  8. return ['status' => $status,'message' => $message];
  9. }
  10. //打印数组,是将数据拆分成两个字符串
  11. echo implode(', ', demo2()),'<hr>';
  12. //打印函数demo2
  13. echo print_r(demo2(),true),'<hr>';

3.3 通过json格式化字符串返回多值

  1. //创建函数demo3,并设为字符串类型
  2. function demo3(): string
  3. {
  4. //创建变量 status和message,并赋值
  5. $status = 1;
  6. $message = 'success';
  7. // 将数组进行json编码,返回json格式的字符串
  8. return json_encode(['status' => $status,'message' => $message]);
  9. }
  10. echo demo3(),'<hr>';

3.4 将返回值序列化成字符串返回多个值

序列化,是将变量的值转为字符串表示,可以很方便的存储或传输。

  1. function demo4(): string
  2. {
  3. $status = 1;
  4. $message = 'success';
  5. // 将数组进行json编码,返回json格式的字符串
  6. return serialize(['status' => $status,'message' => $message]);
  7. }
  8. $str = demo4();
  9. echo $str;
  10. $arr = unserialize($str);
  11. print_r($arr);

4. 实例演示函数的参数

4.1 值参数:值传递参数,这是默认的方式

  1. function demo1(float $arg) : float
  2. { //在函数中对参数的改变,不会映射到外部的参数
  3. return $arg *= 2;
  4. }
  5. $var = 100;
  6. //打印函数demo1内的返回值
  7. echo demo1($var),'<br>';
  8. //打印变量var,因为在函数中对参数的改变,不会映射到外部的参数,依旧打印出100
  9. echo $var,'<hr>';

4.2 引用参数

在参数前添加取地址符 & ,如下的&$arg就是引用参数。
引用参数的情况喜爱,在函数中对参数的改变,会映射到外部的参数

  1. function demo2(float &$arg) : float
  2. {
  3. //在函数中对参数的改变,会映射到外部的参数
  4. return $arg *= 2;
  5. }
  6. $var = 100;
  7. //打印demo2,为200
  8. echo demo2($var),'<br>';
  9. //打印var,为200
  10. echo $var,'<hr>';

4.3 默认参数

  1. //$opt = '+'。设置opt默认参数为 +
  2. function demo3(float $a,float $b,string $opt = '+'):string
  3. {
  4. switch($opt){
  5. case '+':
  6. return sprintf('%d + %d = %d',$a,$b,($a + $b));
  7. break;
  8. case '-':
  9. return sprintf('%d - %d = %d',$a,$b,($a - $b));
  10. break;
  11. case '*':
  12. return sprintf('%d * %d = %d',$a,$b,($a * $b));
  13. break;
  14. case '/':
  15. if($b !== 0)
  16. return sprintf('%d / %d = %f',$a,$b,($a / $b));
  17. else die('0 is bad');
  18. break;
  19. default:
  20. die('非法操作符');
  21. }
  22. }
  23. // 10 + 20 = 30
  24. echo demo3(10,20,'+'),'<br>';
  25. //opt默认参数为 + ,所以依旧 10 + 20 = 30
  26. echo demo3(10,20),'<br>';
  27. // @没有出现在判断语句中,而打印出非法操作符
  28. echo demo3(10,0,'@'),'<br>';
  29. // 10 - 20 = -10
  30. echo demo3(10,20,'-'),'<br>';

4.4 剩余参数

4.4.1 简单用法和复杂用法

在没有学习剩余参数的情况下
我们通常是这样实现数字相加的

  1. //简单用法
  2. //3个数的相加算法
  3. function demo4($a,$b,$c)
  4. {
  5. return $a + $b + $c;
  6. }
  7. echo demo4(39,22,30),'<br>';
  8. echo '<hr>';
  9. //复杂用法
  10. //多个数的相加算法
  11. function demo5()
  12. {
  13. // print_r(func_get_args());
  14. return array_sum(func_get_args());
  15. }
  16. echo demo5(12,31,4134,5325,132);

用复杂用法,来计算可以,但对后期维护不好,而且代码可读性也差

那就用…rest, …spread语法

4.4.2 …rest语法和…spread语法

…rest语法:在变量加上…就成了剩余参数
…spread:用在调用时的参数中,用在有具体值的参数列表,实参

  1. // ..rest用法
  2. //在变量$args加上...就成了剩余参数,...$args
  3. function demo6(...$args)
  4. {
  5. // print_r($args);
  6. return array_sum($args);
  7. }
  8. echo demo6(12,31,4134,5325,132);
  9. //可以进行多个数的运算。
  10. // ...rest ...spread混合一起用
  11. //变量$args为剩余参数
  12. function demo7(...$args)
  13. {
  14. //返回变量$args的相加值
  15. return array_sum($args);
  16. }
  17. //创建数组data,并赋值
  18. $data = [12,33,454,54,34,34];
  19. //...spread用在调用时的参数中,用在有具体值的参数列表,实参
  20. echo demo7(...$data);
  21. //也可以不创建数组,直接输入
  22. echo demo7(...[12,33,454,54,34,34]);

5. 实例演示函数的回调执行方式

直接调用函数(同步调用),有一个致命缺点,就是他是按照顺序调用的,也就是调用语句不执行完成,后面的语句就不会被执行。
如果出现要引用国外网站的数据,由于网络原因,导致读取数据过慢,或者引用很卡的服务器内的内容,那就卡住了。
为了防止这个情况的发生,我们就可以用回调的方式来请求函数了。

!!!!!回调函数是异步执行的重要工具!!!!!!

  1. function demo1($a,$b,$c)
  2. {
  3. return $a + $b + $c;
  4. }
  5. //直接调用
  6. echo demo1(1,2,3),'<br>';
  7. //以回调的方式来请求函数
  8. echo call_user_func('demo1',1,2,3);
  9. echo call_user_func_array('demo1',[1,2,3]);
  10. //创建变量data数组,并赋值
  11. $data =range(1,100);
  12. //创建变量arr,并通过判断语句,选出0到100之间的偶数。
  13. $arr = array_map(function($item){
  14. // % 取模/取余
  15. if($item % 2 === 0) return $item;
  16. },$data);
  17. //array_filter() 函数用回调函数过滤数组中的元素,
  18. $arr =array_filter($arr,function($item){return $item;});
  19. //简化
  20. $arr =array_filter($arr);
  21. print_r($arr);

6. 实例演示函数的全名空间

在php中不允许在同一个命名空间中声明同名函数的,js可以,

下列代码同一个命名空间中声明了相同函数demo1,
导致报错。

  1. function demo1()
  2. {
  3. return __FUNCTION__;
  4. }
  5. echo demo1();
  6. echo '<br>';
  7. function demo1()
  8. {
  9. return __FUNCTION__;
  10. }
  11. echo demo1();
  12. echo '<br>';

但可以在不同命空间中声明同名函数

  1. //ns1命名空间
  2. namespace ns1;
  3. function demo1()
  4. {
  5. return __FUNCTION__;
  6. }
  7. echo demo1();
  8. echo '<hr>';
  9. //ns2命名空间
  10. namespace ns2;
  11. function demo1()
  12. {
  13. return __FUNCTION__;
  14. }
  15. echo demo1();

打印ns1\demo1<hr>ns2\demo1成功

7. 实例演示字符串的四种创建方式与应用场景

字符串的四种创建方式分别是

7.1 单引号

  1. $str = 'string';
  2. //单引号的变量不能被解析出来
  3. echo 'This is a $str hello world';
  4. echo '<br>';
  5. echo '<hr>';
  6. //通过字符串与变量来拼接,后输出
  7. echo 'This is a '.$str.' hello world';
  8. // 单引号的特殊字符不能被解析,原样输出
  9. echo 'hello \n\r world .<br>';
  10. echo '<hr>';
  11. //单引号其实有两重意义:1.本义就是字符。2.字符串的定界符
  12. //单引号中又出现单引号,必须使用转义符:\
  13. echo 'this is a \'test\'.<br>';
  14. echo '<hr>';
  15. // 如果又出现转义符:\,应该连续写两个才可以正常输出,否则就是转义
  16. echo 'this is \'\\test\' world';
  17. echo '<hr>';

7.2 双引号

  1. // 双引号中的变量能被解析出来
  2. echo "This is a $str hello world";
  3. echo '<hr>';
  4. //为了更加清晰的表示出此为变量,用{$str}或 ${str}这样在变量后加其他东西也不会混淆
  5. echo "This is a {$str} hello world.<hr>";
  6. //${var}与es6中的模版字符串语法相同
  7. echo "This is a ${str} hello world.<hr>";
  8. // 双引号的特殊字符能被解析,多个空格,或回车在页面中视为一个
  9. echo "hello \n\r world.<hr>";
  10. echo "hello \n\n\n\r\r\r world.<hr>";
  11. echo "this is \"demo\" . <hr>";

7.3. heredoc,

可以当作双引号的plus+,可以解析变量,双引号不需要转义,非常适合php+html模版

  1. $hello = 'rinki.me';
  2. echo "<p>hello <span style=\"color:red\">$hello</span></p>";
  3. echo <<< HELLO
  4. <p>hello <span style="color:red">$hello</span></p>
  5. HELLO;
  1. // 也可以在heredoc的起始标示符添加双引号
  2. echo <<< "HELLO"
  3. ......
  4. HELLO;

7.4 nodoc

可以当作单引号的plus+,适合大段的纯文本,不适合内嵌变量,或者特殊字符的文本

  1. echo 'this is text';
  2. echo <<< 'abc'
  3. this is textthis is textthis is textthis is textthis is text
  4. abc;
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:字符串不是只有引号, 这个很重要
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments