Blogger Information
Blog 32
fans 0
comment 0
visits 22264
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 变量
培(信仰)
Original
746 people have browsed it

PHP 变量

1. 数据类型转换

| 转换方式 | 函数 |
|————-|—————|
| 临时转换 | (int),(string),(array),(object)…|
| 自动转换 | 根据操作符对操作数的类型要求进行 |
| 强制转换 | setType() |

  1. // 类型转换
  2. // 1. 临时转换:用户
  3. // url中的queryString
  4. // http://php.io/0126/demo1.php?查询字符串
  5. // http://php.io/0126/demo1.php?p=5&id=3
  6. // print_r($_GET['id']);
  7. $id = $_GET['id'];
  8. var_dump($id);
  9. //id应该是整数才方便运算
  10. // url中的内容默认是字符串
  11. $id = (int)$id;
  12. if ($id === 3) {
  13. echo '找到数据了';
  14. }
  15. echo '<br>';
  16. $n = 123;
  17. var_dump($n, (string)$n, (float)$n);
  18. echo '<br>';
  19. var_dump((array)$n, ((array)$n)[0]);
  20. $str = 'php';
  21. //字符串转数组意义不大
  22. //字符串本身就可以当数组使用
  23. echo '<br>';
  24. echo $str[0], $str[1], $str[2];
  25. //php 7.4 以后的版本才有效
  26. //echo $str{0}, $str{1}, $str{2};
  27. echo '<br>';
  28. var_dump((object)$str, ((object)$str)->scalar);
  29. echo '<br>';
  30. var_dump($str);
  31. // 2. 自动转换: 系统
  32. //每一种操作符,要求的操作数类型是固定的,如果不满足就自动转换
  33. echo '<hr>';
  34. echo "123 + '456' =>", 123 + '456';
  35. //输出:123 + '456' =>579
  36. echo '<br>';
  37. echo "123 + (int)'456' =>", 123 + (int)'456';
  38. //输出:123 + (int)'456' =>579
  39. echo '<br>';
  40. echo "123 + (int)'PHP456' => ", 123 + (int)'PHP456';
  41. //输出:123 + (int)'PHP456' => 123
  42. echo '<br>';
  43. echo "123 + (int)'456PHP' => ", 123 + (int)'456PHP';
  44. //输出:123 + (int)'456PHP' => 579
  45. echo '<br>';
  46. // "." ,希望两边都是字符串,如果不是就转换为字符串
  47. echo 'php' . 123 . '<br>';
  48. //等价于
  49. echo 'php' . (string)123 . '<br>';
  50. //最常用的是布尔类型转换
  51. // if ($email) echo '没有定义邮箱';
  52. //$email 未定义,null
  53. // var_dump($email);
  54. echo var_export((bool)null);
  55. echo '<br>';
  56. // 检查 变量是否存在 isset
  57. if (!isset($email)) echo '没有定义邮箱';
  58. // 3. 永久转换:只针对变量
  59. echo '<br>';
  60. $price = 888;
  61. echo gettype($price), '<br>';
  62. echo gettype((string)$price), '<br>';
  63. echo gettype($price), '<br>';
  64. //永久转换
  65. settype($price, 'string');
  66. echo gettype($price), '<br>';

2. 数据检测

转换方式 函数
标量 is_int(),is_string(),is_bool()….
复合 is_array(),is_object()
特殊 is_null(),is_resource()
  1. <?php
  2. //类型检测
  3. function sum1($a, $b)
  4. {
  5. printf('%d + %d = %d', $a, $b, ($a + $b));
  6. }
  7. echo sum1(10, 15), '<br>';
  8. // echo sum1('php', 'cn');
  9. function sum2($a, $b)
  10. {
  11. // is_numeric():检查参数是否是数值或者数值类型的字符串
  12. // eg: 123,'123'
  13. if (is_numeric($a) && is_numeric($b))
  14. printf('%d + %d = %d', $a, $b, ($a + $b));
  15. // printf('%f + %f = %f<br>', $a, $b, ($a + $b));
  16. else echo '参数类型不匹配';
  17. }
  18. echo sum2('php', 15), '<br>';
  19. echo sum2(15, "123"), '<br>';
  20. //%d 限定了数据的输出
  21. // echo sum2(15.123, "123"), '<br>';
  22. // echo sum2(123.45,123.45);
  23. function sum3($a, $b)
  24. {
  25. if (is_int($a) && is_int($b))
  26. printf('%d + %d = %d', $a, $b, ($a + $b));
  27. else echo '参数类型不匹配 <br>';
  28. }
  29. // sum3(123, '456');
  30. sum3(123, 456);
  31. // sum3(123.45, 456.78);
  32. // php7+:参数类型检测,支持符合类型,也支持标量
  33. echo '<br><hr>';
  34. function sum4(float $a, float $b): string
  35. {
  36. //参数类型限定可以自动识别数值或者数值型字符串,is_numeric()的实现
  37. // return sprintf('%d + %d = %d', $a, $b, ($a + $b));
  38. return $a . '+' . $b . '=' . ($a + $b);
  39. }
  40. echo sum4(120, "456");
  41. echo '<br>';
  42. echo sum4(123.45, 456.78);
  43. echo '<br><hr>';
  44. // is_string(),is_bool(),is_array(),is_object()
  45. // is_null(),is_resource()
  46. // is_scalar():检测是否是标量
  47. // 标量:理解为“单值”,100 ,‘php’,true
  48. // 不是标量:array,object
  49. var_export(is_scalar(1));
  50. echo '<br><hr>';
  51. var_export(is_scalar(true));
  52. echo '<br><hr>';
  53. var_export(is_scalar([true, 1, 2, 'abc']));
  54. echo '<br><hr>';
  55. var_export(is_scalar(new class
  56. {
  57. }));
  58. echo '<br> null 不是标量<br>';
  59. var_export(is_scalar(null));
  60. echo '<br>';
  61. // 函数/闭包/回调 也不是标量
  62. var_export(is_scalar(function () {
  63. }));

3. 变量

  • 仅允许使用:英文字母(a-z,A-Z),数字(0-9),下划线(_)或者他们的组合
  • 不允许使用数字开头
  • 必须使用”$”符为前缀
  • 严格区分大小写
  • 驼峰命名法
  1. //变量知多少
  2. // 需要重复使用的数据,或者代码复用的部分,可以暂存,就需要变量
  3. // 一句话:变量就是代码中需要暂存的数据
  4. // 变量按名访问
  5. // 变量名必须是一个合法标识符
  6. // 合法标识符
  7. // 禁止使用数字开头
  8. // 标识符有两类
  9. // 预定义的:保留字,关键字,class,public
  10. // 自定义
  11. // 1. 变量声明
  12. // 变量除了要满足以上的要求外,还有特殊性
  13. // 1. 变量必须要用"$"为前缀:$name
  14. // 2. 严格区分大小写
  15. $userName = 'TJ';
  16. $username = 'T.,J';
  17. echo $userName, $username;
  18. // 合法:$name ,$_age, $num1
  19. // 非法:name,$123abc,$my-emial,$a#com
  20. // 有些看着合法,不要使用
  21. echo '<br>';
  22. $_ = 1;
  23. $a1 = 2;
  24. $_1 = 3;
  25. var_dump($_, $a1, $_1);
  26. // 1. 驼峰式:$itemPrice,变量,对象的属性和方法,getUser()
  27. // 2. 蛇形: set_publick(),函数
  28. // 3. pascal:UserModel,类,与驼峰式很像,所以也叫大驼峰
  29. // 4. 全大写:常量
  30. // 函数不区分大小写
  31. function hello($name)
  32. {
  33. return 'Hello ' . $name;
  34. }
  35. echo '<br>';
  36. echo hello('php'), '<br>';
  37. echo HELLO('world'), '<br>';
  38. // 2. 变量赋值
  39. echo '<hr>';
  40. $color = 'red';
  41. echo gettype($color), '<br>';
  42. //变量名 用另外一个变量表示
  43. $url = 'site';
  44. // $site = 'php';
  45. $$url = 'php 中文网';
  46. // $$url:可变变量,变量标识符来自另外一个变量
  47. echo $url . ' => ' . $$url . '<br>';
  48. echo $url . ' => ' . $site . '<br>';
  49. // 路由解析 很有用
  50. // 赋值 默认是 “值传递”
  51. $price1 = 888;
  52. $price2 = $price1;
  53. printf('price1 = %d,price2 = %d<br>', $price1, $price2);
  54. $price1 = 666;
  55. printf('price1 = %d,price2 = %d<br>', $price1, $price2);
  56. echo '<hr>';
  57. // 引用赋值 其实就是给原始变量起了一个别名,并未创建新变量
  58. $price1 = 999;
  59. $price2 = &$price1;
  60. printf('price1 = %d,price2 = %d<br>', $price1, $price2);
  61. $price1 = 666;
  62. printf('price1 = %d,price2 = %d<br>', $price1, $price2);
  63. // 3. 预定义变量
  64. // 超全局变量:数组,任何地方都可以访问,不受作用域限制
  65. // $GLOBALS:引用全局作用域中可用的全局变量
  66. // $_SERVER:服务器和执行环境信息
  67. // $_GET:通过URL参数(又叫query string) 传递给当前脚本的变量的数组
  68. // $_POST:当HTTP POST请求的 Content-Type 是 application/x-www-
  69. // $_FILES:通过HTTP POST方式上传到当前脚本的项目的数组
  70. // $_COOKIE:通过当前脚本可用 SESSION 变量的数组
  71. // $_REQUEST:默认情况下包含了 $_GET,$_POST 和$_COOKIE 的数组
  72. // $_NEV:通过环境方式传递给当前脚本的变量的数组
  73. // $GLOBALS
  74. $name = 'TJ';
  75. $email = 'TJ@php.cn';
  76. printf('name = %s,email = %s<br>', $name, $email);
  77. printf('name = %s,email = %s<br>', $GLOBALS['name'], $GLOBALS['email']);
  78. // $_SERVER
  79. //array_walk()
  80. // array_walk($_SERVER, function ($value, $key, $separator) {
  81. // echo $key . $separator . $value . '<br>';
  82. // }, '=>');
  83. echo 'IP: ' . $_SERVER['REMOTE_ADDR'] . '<br>';
  84. echo '浏览器:' . $_SERVER['HTTP_USER_AGENT'] . '<br>';
  85. echo '脚本的绝对路径 :' . $_SERVER['SCRIPT_FILENAME'] . '<br>';
  86. echo '脚本的绝对路径 :' . $_SERVER['SCRIPT_NAME'] . '<br>';
  87. echo '当前脚本名称 :' . $_SERVER['PHP_SELF'] . '<br>';
  88. //http://php.io:8080/0126/demo3.php?id=1&name=admin
  89. //id=1&name=admin 查询字符串,给GET请求用
  90. echo '查询字符串 :' . $_SERVER['QUERY_STRING'] . '<br>';
  91. //http://php.io:8080/0126/demo3.php?id=1&name=admin
  92. //http://php.io:8080/0126/demo3.php/id/5/name/peter
  93. // /id/5/name/peter :path_info
  94. //隐藏入口文件
  95. //http://php.io:8080/0126/id/5/name/peter.html
  96. echo 'PATH_INFO : ' . $_SERVER['PATH_INFO'] . '<br>';
  97. // 框架中会使用到
  98. echo 'URI:' . $_SERVER['REQUEST_URI'];
  99. //http://php.io:8080/0126/demo3.php?id=1&name=admin
  100. echo '<br>';
  101. echo $_GET['id'];

4. 常量

  • define():函数
  • const:
  1. // 常量
  2. // 常量是固定值,一旦创建不可更新,不可删除
  3. // 常量不是变量,前面不要加 “$”符
  4. // 常量推荐全部大写,多个单词之前用"_"链接
  5. // 1. 函数
  6. define('NATION', '中国');
  7. // 2. 关键字
  8. const GENDER = '男';
  9. printf('国籍: %s, 性别:%s <br>', NATION, GENDER);
  10. // 程序执行有两个阶段:编译, 运行
  11. // 编译阶段:对代码进行静态分析,主要针对现在能看到的,或者能够确定下来的值。
  12. // 常量,类声明
  13. // const 运行在编译阶段。
  14. // define() 在运行阶段才创建常量
  15. // if(),function()
  16. function a()
  17. {
  18. define('SITE', 'php.cn');
  19. }
  20. a();
  21. echo SITE, '<br>';
  22. if (true) {
  23. define('NAME', 'TJ');
  24. }
  25. echo NAME, '<br>';;
  26. // const 只支持字面量,不允许表达式
  27. define('B', '我是' . NAME);
  28. echo B, '<br>';
  29. define('ARR1', [1, 2, 3]);
  30. print_r(ARR1);
  31. const ARR2 = ['a', 'b', 'c'];
  32. print_r(ARR2);

注意:isset(),$GLOBALS,$_SERVER的使用。

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
Author's latest blog post