1. 数据类型的转换与检测技术;

数据类型的转换

  1. <?php
  2. // 类型转换
  3. // 1. 临时转换: 用户
  4. // http://by.io/012601/demo1.php?id=3
  5. $id = $_GET['id'];
  6. var_dump($id);
  7. echo '<br>';
  8. // id应该是整数才方便运算
  9. // url中的内容全部默认是字符串
  10. $id = (int)$id;
  11. if($id===3){
  12. echo '数据存在';
  13. };
  14. echo '<br>';
  15. $n = 123;
  16. var_dump($n,(string)$n,(float)$n);
  17. echo '<hr>';
  18. var_dump((array)$n,((array)$n)[0]);
  19. $srt = 'php';
  20. //字符串转数组的意义不大
  21. echo $str[0],$str[1],$str[2],'<br>';
  22. var_dump((object)$str,((object)$str)->scalar);
  23. var_dump($str);
  24. echo '<br>';
  25. // 2. 自动转换: 系统
  26. //每一种操作符,它要求的操作数类型是固定的,如果不满足就自动转换
  27. echo 222 + "333";
  28. echo '<br>';
  29. //"+"要求参与计算的数据都是数值类型,如果不是,就是会触发自动转换
  30. echo 222+ (int)'111';
  31. echo '<br>';
  32. echo 123 + 'php111';
  33. echo '<br>';
  34. echo (int)'php111';
  35. echo '<br>';
  36. echo 123 + (int)'php111';
  37. echo '<br>';
  38. //".",希望两边都是字符串,如果不是就转换
  39. echo 'php' . 123 . '<br>';
  40. //等价于
  41. echo 'php' . (string)123 . '<br>';
  42. // 最常用的是布尔转换
  43. if (!$email) echo '没定义邮箱';
  44. var_dump($email);
  45. echo var_export((bool)null);
  46. echo '<hr>';
  47. if (!isset($email)) echo '没定义邮箱';
  48. // 3. 永久转换: 只针对变量
  49. $price = 111;
  50. echo gettype($price),'<br>';
  51. echo gettype((string)$price),'<br>';
  52. echo gettype($price),'<br>';
  53. //永久转换
  54. settype($price,'string');
  55. echo gettype($price),'<br>';

类型检测

  1. <?php
  2. //类型检测
  3. function sum1($a, $b)
  4. {
  5. printf('%d + %d = %d<br>', $a, $b, ($a + $b));
  6. }
  7. sum1(11, 22);
  8. // sum1('php','cn');
  9. function sum2($a, $b)
  10. {
  11. // is_numeric():检查参数是否是数值或数值型的字符串
  12. // 123, "123"都是有效的数据
  13. if (is_numeric($a) && is_numeric($b))
  14. printf('%d + %d = %d<br>', $a, $b, ($a + $b));
  15. else echo '参数类型错误';
  16. }
  17. sum2(22,33);
  18. sum2('php','cn');
  19. echo '<br>';
  20. sum2(1,'111');
  21. function sum3 ($a,$b)
  22. {
  23. if (is_int($a) && is_int($b))
  24. printf('%d + %d = %d<br>', $a, $b, ($a + $b));
  25. else echo '参数类型错误';
  26. }
  27. sum3(11,'22');
  28. echo '<br>';
  29. sum3(11,22);
  30. sum3(11.1,22.2);
  31. echo '<hr>';
  32. // php7+: 参数类型检测,支持复合类型,也支持标量
  33. function sum4(float $a,float $b) : string
  34. {
  35. // 参数类型限定可以自动识别数值或数值型的字符串, is_numeric()
  36. // return sprintf('%d + %d = %d<br>', $a, $b, ($a + $b));
  37. return $a . ' + ' . $b . ' = ' . ($a + $b). '<br>';
  38. }
  39. echo sum4(11, "22");
  40. echo sum4(11.11, 22.22);
  41. echo '<hr>';
  42. // is_scalar(): 检测变量类型是否是标量
  43. var_export(is_scalar(1));
  44. echo '<br>';
  45. var_export(is_scalar(new class{}));
  46. echo '<br>';
  47. var_export(is_scalar([]));
  48. echo '<br>';
  49. // null 不是标量
  50. var_export(is_scalar(null));
  51. // 函数/闭包/回调
  52. echo '<br>';
  53. var_export(is_scalar(function(){}));

2. 变量声明与常量声明的方式与使用

变量声明

  1. <?php
  2. // 1. 变量声明
  3. // 变量必须要用"$"为前缀: $name
  4. // 严格区分大小写
  5. $userName = '小明';
  6. $password = 123;
  7. echo '账户名:'.$userName, ',','密码:'.$password,'<br>';
  8. $_ = 1;
  9. $a1 = 2;
  10. $_1 = 3;
  11. var_dump($_, $a1, $_1);
  12. echo '<hr>';
  13. // 1. 驼峰式: $itemPrice,变量,对象的属性和方法, getUser()
  14. // 2. 蛇形: set_public(),函数
  15. // 3. 帕斯卡: UserModel, 类,与驼峰式很像,所以也叫: 大驼峰
  16. // 4. 全大写: 常量
  17. // 函数不区分大小写
  18. function hello($name)
  19. {
  20. return 'Hello ' . $name;
  21. }
  22. echo hello('小明'),'<br>';
  23. echo HELLO('小红'),'<br>';
  24. // 2. 变量赋值
  25. $color = 'red';
  26. echo gettype($color),'<br>';
  27. $url = 'site';
  28. $$url = 'php中文网';
  29. // $$url: 可变变量,变量标识符来自另外一个变量
  30. echo $url . ' => ' . $$url . '<br>';
  31. echo $url . ' => ' . $site . '<br>';
  32. // 默认是"值传递"
  33. $price1 = 111;
  34. $price2 = $price1;
  35. printf('price1 = %d, price2 = %d<br>', $price1, $price2);
  36. $price1 = 222;
  37. printf('price1 = %d, price2 = %d<br>', $price1, $price2);
  38. echo '<hr>';
  39. // 引用赋值
  40. $price1 = 333;
  41. // $price2 =& $price1;
  42. $price2 = &$price1;
  43. // 引用赋值其实就是给原始变量起一个别名,并未创建新变量
  44. printf('price1 = %d, price2 = %d<br>', $price1, $price2);
  45. $price1 = 444;
  46. printf('price1 = %d, price2 = %d<br>', $price1, $price2);
  47. // 3. 预定义变量
  48. // 超全局变量: 数组,任何地方都可以访问,不受作用域限制
  49. // $GLOBALS: 引用全局作用域中可用的全部变量
  50. // $_SERVER: 服务器和执行环境信息
  51. // $_GET :通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
  52. // $_POST:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
  53. // $_FILES:通过 HTTP POST 方式上传到当前脚本的项目的数组
  54. // $_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
  55. // $_SESSION:当前脚本可用 SESSION 变量的数组
  56. // $_REQUEST: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
  57. // $_ENV: 通过环境方式传递给当前脚本的变量的数组
  58. // $GLOBALS
  59. $name = '小明';
  60. $email = 'xm@php.cn';
  61. printf('name = %s, email = %s<br>', $name, $email);
  62. printf('name = %s, email = %s<br>', $GLOBALS['name'], $GLOBALS['email']);
  63. echo 'IP: '. $_SERVER['REMOTE_ADDR']. '<br>';
  64. echo '浏览器: '. $_SERVER['HTTP_USER_AGENT']. '<br>';
  65. echo '脚本绝对路径 = '. $_SERVER['SCRIPT_FILENAME']. '<br>';
  66. echo '脚本相对路径 = '. $_SERVER['SCRIPT_NAME']. '<br>';
  67. echo '当前脚本名称 = '. $_SERVER['PHP_SELF']. '<br>';
  68. // http://by.io/012601/demo3.php?id=1&name=admin
  69. // id=1&name=admin 查询字符串,给GET请求用
  70. echo '查询字符串 : '. $_SERVER['QUERY_STRING']. '<br>';
  71. // http://by.io/012601/demo3.php?id=1&name=admin
  72. // http://by.io/012601/demo3.php?id=1&name=admin
  73. // /id/5/name/xm: path_info
  74. echo 'PATH_INFO = '. $_SERVER['PATH_INFO']. '<br>';
  75. echo 'URI: ' . $_SERVER['REQUEST_URI'], '<br>';
  76. echo $_GET['id'];

常量声明

  1. <?php
  2. // 常量
  3. // 是固定的值,一旦创建不可更新,不可删除
  4. // 常量不是变量,前面不要加" $ "
  5. // 常量推荐全部大写,多个单词之间用下划线连接
  6. // 1.函数
  7. define('NAME', '小明');
  8. // 2. 关键字
  9. const SEX = '男';
  10. printf('姓名: %s, 性别: %s<br>', NAME, SEX);
  11. function a() {
  12. define('ID', 123);
  13. // const A = 1;
  14. }
  15. a();
  16. echo ID;
  17. if (true) {
  18. define('NAME', '小明');
  19. }
  20. echo NAME;
  21. echo '<br>';
  22. // const 只支持字面量,不允许表达式
  23. define('B', '我是' . NAME);
  24. echo B, '<br>';
  25. define('ARR1', [1,2,3]);
  26. print_r(ARR1);
  27. const ARR2 = [1,2,3];
  28. print_r(ARR2);

更多相关文章

  1. php常用数组函数以及数组的交集,差集,并集
  2. 数组的排序, 数组的合并, 数组成员的统计
  3. volatile关键字
  4. 示例演示:数据类型的转换和检测技术、变量与常量的方式以及使用
  5. php学习笔记(函数相关_作用域_闭包_回调_多指返回)
  6. 细解php函数
  7. 你应该知道的7 个 JavaScript 原生错误类型
  8. 在 React 中缩放、裁剪和缩放图像
  9. PHP函数作用域、闭包及函数多值返回

随机推荐

  1. golang 有gc吗
  2. golang 中const是什么
  3. golang 协程占多大内存
  4. golang 指针怎么用
  5. golang 为什么没有枚举
  6. golang 怎么做热更新
  7. GOLANG 为什么还有指针
  8. golang 怎么调用c代码
  9. golang 数组存的是什么
  10. golang 怎么设计一个栈