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的使用。

更多相关文章

  1. 小白之路---C语言知识点
  2. 2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?
  3. 小白之路---C语言
  4. 变量与常量
  5. volatile与synchronized的区别
  6. js基础、函数
  7. Windows系统中python的保姆级安装教程
  8. js的变量与常量、常用数据
  9. MGR用哪个版本?5.7 vs 8.0

随机推荐

  1. ES2016
  2. Android(安卓)使用Post方式提交数据
  3. Android(安卓)如何建立AIDL
  4. 包装模式就是这么简单啦
  5. Intent妙用之编写自己的android主界面
  6. 还在使用if-else?试一下策略模式
  7. 理解Git Submodules
  8. PreferenceActivity用法简介【转】
  9. 单例模式的十种写法,你会几个?(修补了几个错
  10. Lottie动画简介