Blogger Information
Blog 18
fans 0
comment 0
visits 11026
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
210426 PHP 输出方法,数据类型,变量,作用域,常量
xyphpblog
Original
781 people have browsed it

1. PHP 输出主要方法

字符串

  1. echo “str”
  2. print “str”

区别:

  • print有返回值为1,只能接收一个参数,可用于三元运算符
  • echo没有返回值,可接收多个参数用逗号(,)隔开
  1. <?php
  2. //echo
  3. echo "using echo";
  4. echo "<hr>";
  5. //print
  6. $a = print "using print";
  7. //return value of print
  8. echo " return ".$a;
  9. echo "<hr>";
  10. $b = "using echo ";
  11. echo $b,$b;
  12. echo "<hr>";

*注:ob_clean() 使之前代码不输出

数组

  1. var_dump(arr)
  2. print_r(arr,可选参数:true/false)
  3. var_export(arr,可选参数:true/false)

区别:

  • 输出格式不同
  • print_r()和var_export()可以设置第二个参数true,以使内容不显示在浏览器中,但其返回值可以储存在变量中用于日志记录
  1. ob_clean();
  2. $arr = [1,true,"hehe",3.14];
  3. //数组也可这样声明
  4. // $arr2 = Array("id"=>1,"name"=>"haha","working"=>false);
  5. echo "using echo \$arr";
  6. echo "<hr>";
  7. echo $arr;
  8. echo "<hr>";
  9. echo "using var_dump(\$arr)";
  10. echo "<hr>";
  11. var_dump($arr);
  12. echo "<hr>";
  13. echo "using print_r(\$arr)";
  14. echo "<hr>";
  15. print_r($arr);
  16. echo "<hr>";
  17. echo "using var_export(\$arr)";
  18. echo "<hr>";
  19. var_export($arr);
  20. echo "<hr>";
  21. echo "using print_r(\$arr,true)";
  22. print_r($arr,true);
  23. echo "<hr>";
  24. echo "using var_export(\$arr,true)";
  25. var_export($arr,true);

  1. $v1=print_r($arr,true);
  2. $v2=var_export($arr,true);
  3. file_put_contents("log1.txt",$v1);
  4. file_put_contents("log2.txt",$v2);

*注:<pre></pre>标签可使内容保持文本格式输出和

2. PHP 数据类型

var_dump() or gettype() 可以用于查看数据类型

2.1 标量类型

  • Integer
  • Float
  • String
  • Boolean

2.2 特殊类型

  • resource
  • null

*注:@符号在PHP中用作错误控制操作符。当表达式附加@符号时,将忽略该表达式可能生成的错误消息。

resource类型

  1. <?php
  2. //resource 资源类型 保存到外部资源的一个引用
  3. //fopen
  4. $reader = fopen("log1.txt","w");
  5. var_dump($reader);
  6. //resource(3) of type (stream)
  7. // 3是id stream是资源类型
  1. //imagecreate()
  2. $image_creater = imagecreate(100,50);
  3. var_dump($image_creater);
  4. //resource(4) of type (gd)
  5. // id gd是PHP的一个库,默认打开(phpinfo()可见)

null类型

  1. //null 表示变量没有值
  2. $reader = null;
  3. var_dump($reader);
  4. //NULL
  5. unset($image_creater);
  6. var_dump($image_creater);
  7. //NULL

2.3 数据类型转换

  • 强制转换(临时,原变量类型和值不变)
  • 自动转换(数值,字符串,布尔)(临时,原变量类型和值不变)
  • 当变量的值超过系统预定义的范围也会发生自动类型转换,如int

强制类型转换

  1. <?php
  2. # 强制类型转换
  3. $page = '3';
  4. echo gettype($page);
  5. echo "<hr>";
  6. $newPage = (int)$page;
  7. echo gettype($newPage);
  8. echo "<hr>";
  9. var_dump($newPage,(string)$newPage,(float)$newPage);
  10. echo "<hr>";
  11. var_dump((array)$newPage,((array)$newPage)[0]);

自动类型转换—数值
(使用+ - 运算符,计算的数据需为数值类型,如果不是数值类型,会触发自动转换)

  1. # 自动类型转换
  2. $a = "200pigs";
  3. @$a += 100;
  4. var_dump($a);
  5. // int(300)
  6. $a += 5.5;
  7. var_dump($a);
  8. // float(305.5)
  9. $a += null + "10";
  10. var_dump($a);
  11. // float(315.5)

自动类型转换—字符串
(使用 . 拼接字符串,会触发自动转换为字符串)

  1. echo "I am ". 18 ." years old ".true;
  2. // I am 18 years old 1

自动类型转换—布尔

  1. # if判断中,null等同于false
  2. if (!null) {
  3. echo "ok";
  4. }
  5. // ok

以上转换不改变原来变量的类型和值

强制改变变量的类型

  1. @settype($page,boolean);
  2. echo "<hr>";
  3. echo $page;
  4. // 1
  5. echo gettype($page);
  6. // boolean

2.4 php强类型模式

  • 以下函数中,传入的参数会强制转为int型
  1. function add(int $a, int $b) : string {
  2. return $a + $b;
  3. }
  4. var_dump(add(11.11,22.22));
  5. // string(2) "33"

3. 变量

3.1 变量命名方式

  • 字母,数字,下划线
  • 不能以数字开头
  • 不能使用关键字
  • 变量区分大小写,函数名不区分

3.2 变量赋值

  • 值(value)
    将变量a的值赋给变量b,复制出新的值内存地址空间,值发生变化时互不影响
  • 引用(reference)
    • 将对变量a的引用赋给变量b,使变量b指向同一个地址,没有复制,速度更快
    • unset()被引用的变量只会解除变量间的关联
  1. $a = 100;
  2. $b = $a;
  3. $c = &$a;
  4. echo "\$a=$a, ","\$b=$b, ","\$c=$c";
  5. echo "<hr> change a to 55: \$a=55<hr>";
  6. $a = 55;
  7. echo "\$a=$a, ","\$b=$b, ","\$c=$c";
  8. echo "<hr>unset(\$a)<hr>";
  9. echo "\$a=$a, ","\$b=$b, ","\$c=$c";
  10. echo "<hr> change a to 99: \$a=99<hr>";
  11. echo "\$a=$a, ","\$b=$b, ","\$c=$c";

3.3 检查变量函数

  • isset()
    若变量存在且不为null,返回true;反之返回false
  1. $uname = "Tom";
  2. var_dump(isset($uname));
  3. //bool(true)
  4. $uname = null;
  5. var_dump(isset($uname));
  6. //bool(false)
  • empty() 判断变量是否为空字符串/null/0/false,是其中之一则返回true;反之返回false
  1. $upwd = "";
  2. var_dump(empty($upwd));
  3. // bool(true)
  4. $upwd = null;
  5. var_dump(empty($upwd));
  6. // bool(true)
  7. $upwd = 0;
  8. var_dump(empty($upwd));
  9. // bool(true)
  10. $upwd = 1;
  11. var_dump(empty($upwd));
  12. // bool(false)
  13. $upwd = false;
  14. var_dump(empty($upwd));
  15. // bool(true)
  16. $upwd = true;
  17. var_dump(empty($upwd));
  18. // bool(false)

3.4 变量作用域

  • 定义在函数外部的变量是全局变量,在函数内无法直接访问
  • 定义在函数内部的变量是局部变量,在函数外无法访问
  • 在函数中使用全局变量
    • global $a, $b
    • $GLOBALS[“a”],$GLOBALS[“b”]
  1. $a = 10;
  2. $b = 20;
  3. function a(){
  4. echo $a+$b;
  5. }
  6. a();
  7. //0
  8. #在函数中使用全局变量
  9. #1. global
  10. function b(){
  11. global $a, $b;
  12. echo $a+$b;
  13. }
  14. b();
  15. //30
  16. #2. $GLOBALS[name]
  17. function c(){
  18. echo $GLOBALS["a"]+$GLOBALS["b"];
  19. }
  20. c();
  21. //30

3.5 预定义的全局变量

  • 数组
  • 任何地方都可以访问,无作用域限制
  1. // $GLOBALS: 引用全局作用域中可用的全部变量
  2. // $_SERVER: 服务器和执行环境信息
  3. // $_GET :通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
  4. // $_POST:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
  5. // $_FILES:通过 HTTP POST 方式上传到当前脚本的项目的数组
  6. // $_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
  7. // $_SESSION:当前脚本可用 SESSION 变量的数组
  8. // $_REQUEST: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
  9. // $_ENV: 通过环境方式传递给当前脚本的变量的数组

例 $_GET
获取地址栏后面的参数
http://phps.com/0426/demo5.php?id=1&age=22

  1. echo "<pre>".print_r($_GET,true)."<pre>";

4. 常量

  • 用const声明(不是$)或define(NAME,value),但在类中只能用const
  • 定义时必须初始化
  • 不能重新被定义或者取消定义
  • 通常为固定的值,名称大写
  • 常量,类,接口,函数,是全局成员,而变量不是
  1. <?php
  2. # 常量 const, define(name,value)定义
  3. const PATH = "/0426/demo4.php";
  4. const FEMALE = "女";
  5. define("MALE","男");
  6. printf("性别 <br> Male %s <br> Female %s",MALE,FEMALE);
  7. //printf() 格式化输出
  8. # 在类中定义常量只能使用 const
  9. class Test{
  10. const PATH = "/0426/demo4.php";
  11. }

4.1 系统预定义常量

get_defined_constants(true/false)

echo "<pre>".print_r(get_defined_constants(true),true)."<pre>";

4.2 魔术常量

  • 预定义的常量,但值取决于使用的位置


(source:https://www.php.net/manual/en/language.constants.magic.php)

  1. <?php
  2. echo "line: ".__LINE__;
  3. // line: 2
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