从零开始的PHP生活Day1

PHP

什么是PHP?

PHP(Hypertext Preprocessor,超文本预处理器)是一种服务器端的、跨平台的、HTML嵌入式的弱类型开源脚本语言。

1、服务器端:PHP需要使用服务器软件进行编译。

2、跨平台:PHP支持多种操作系统平台,并且能够被多种服务器软件编译。

3、HTML嵌入式:PHP代码是编写在HTML代码中的。

4、弱类型:PHP定义变量时不需要指明数据类型。

5、开源:即开发源代码,PHP的源代码是向所有人公开的。

6、脚本语言:PHP是以脚本的方式进行编译的,即只在被调用时进行编译。

安装环境

下载phpstudy 安装路径不要有空格和汉字

下载vscode

安装插件汉化包

  • Beautify 用来格式化html js css代码
  • Bracket Pair Colorrizer 用来区分括号
  • Chinese(Simplified) Language 汉化
  • Code Runner 用于运行代码
  • Code Spell Checker 用于检测代码语法
  • Open in browser 用于在浏览器中打开html文件
  • PHP Debug 用于在程序中打断点检测
  • VS Color Picker 用于采集信息
  • vscode-fileheader 用于生成自定义文件头信息
1545316474232.png

hello.php

<?php
  echo 'Hello World'; 
 ?>  
1545316531689.png

放在网站根目录 然后浏览器访问http://localhost:8080/hello.php

如果出现Hello World 那么恭喜你!!

php标记

XML风格的标记 默认

<?php?>

脚本风格的标记

<script language="php"></script>

简短风格标记

<? ?>

ASP风格的标记

<% %>

php注释

单行注释

<?php
      echo '这是单行注释';    //显示信息。
  ?>

多行注释

 <?php
  ​
      /*这是
  ​
      多行
  ​
      注释。*/
  ​
      echo '这是多行注释';
  ​
  ?>

Shell注释

<?php
      header("content-Type:text/html; charset=gb2312");
  ​
      echo '这是Shell注释';    #显示信息。
  ​
  ?>

php输出

echo

echo 来输出一个或多个字符串

void echo(string arg1[, string…]);

echo没有返回值,其中“arg1”和“…”为一系列要输出的字符串对象。

 <?php
  ​
      echo '使用echo输出字符串';    //使用echo输出字符串。
  ​
  ?>

print

print”来输出一个字符串

int print(string $arg);

print的返回值总为“1”,其中“$arg”为要输出的字符串对象。

      print '使用print输出字符串';    //使用print输出字符串。
  ?>

print和echo的作用基本一样,两者之间的区别在于echo没有返回值而print总是返回“1”,因此echo的执行速度相对来说稍快一些。

printf()

printf()”函数来输出格式化的字符串,语法格式如下:

int printf(string format[, mixedarg1[, mixed $…]]);

printf()函数的返回值为字符串长度,其中“format”为需要输出的字符串,其中需要使用类型指示符来指明输出的格式;“arg1”和“$…”为可选参数,用于指定一系列要输出的对象。

常用的类型指示符

指示符 描述
%b 将参数当作整数,并显示为二进制数
%c 将参数当作整数,并显示为对应的ASCII字符
%d 将参数当作整数,并显示为有符号的十进制数
%f 将参数当作浮点数,并显示为浮点数
%o 将参数当作整数,并显示为八进制数
%s 将参数当作字符串,并显示为字符串
%u 将参数当作整数,并显示为无符号的进制数
%x 将参数当作整数,并显示为小写的十六进制数
%X 将参数当作整数,并显示为大写的十六进制数

</figure>

  <?php
  ​
      $num1 = 1;    //定义一个整型变量。
  ​
      $num2 = 2;    //定义一个整型变量。
  ​
      //计算“$num1”与“$num2”之和。
  ​
      $sum = $num1 + $num2;
  ​
      //使用printf()函数输出格式化的字符串。
  ​
      printf('%d + %d = %d', $num1, $num2,$sum);
  ​
  ?>

print_r()

print_r()函数来输出数组结构

bool print_r(mixed expression[, boolreturn]);

其中“expression”为需要输出的数组对象;“return”为可选参数,用于指定函数的返回值,默认值为“false”表示返回“1”,并直接输出数据结构,若设置为“true”则表示返回一个由数据结构组成的字符串。

  <?php
  ​
      $arr = array('this', 'is', 'an', 'array');    //定义一个数组变量。
  ​
      print_r($arr);    //使用print_r()函数输出数组结构。
  ​
  ?>

如果“expression”为整型或字符串等类型的变量,则输出该变量本身;如果“expression”为数组,则按键值和元素的顺序输出该数组中的所有元素。

标量数据类型

boolean

布尔型(boolean)数据类型用于存放一个真(true)或假(false)值,其中“true”和“false”为PHP的内部关键字。

布尔数据类型主要用于应用程序的逻辑运算,大多使用在条件控制语句或循环控制语句的条件表达式中。

在PHP中不仅仅只有boolean值“false”为假,在一些特殊情况下某些非boolean也会被认为是假,例如:“0”、“0.0”、“'0'”、空白字符串('')和只有声明却没有赋值的数组等。

 <?php
  ​
      $boo = true;    //定义一个布尔型变量,并赋值为“true”。
  ​
      //判断$boo的值是否为“true”。
  ​
     if ($boo == true)
  ​
          echo '变量$boo为真';    //显示信息。
  ​
     else
  ​
          echo '变量$boo为假';    //显示信息。
  ​
  ?>

string

字符串型(string)数据类型用于存放一个连续的字符序列,即由一连串字符组成的字符串,而这些字符可以是数字字母汉字符号

在PHP中定义字符串的方法有单引号(')、双引号(")和界定符(<<<)三种。

单引号

使用单引号定义字符串,即使用一对 ' 将字符串的字符包含在内。

  <?php
  ​
      //定义一个字符串型变量,并赋值为“this is a string”。
  ​
      $str = 'this is a string';
  ​
      echo $str;    //显示信息。
  ​
  ?>

双引号

使用双引号定义字符串,即使用一对 " 将字符串的字符包含在内。

<?php
  ​
      //定义一个字符串型变量,并赋值为“this is a string”。
  ​
      $str = "this is a string";
  ​
      echo $str;    //显示信息。
  ​
  ?>

区别在于:

1、需要转义的字符不同:在单引号定义的字符串中,只需要对单引号 ' 进行转义;而在双引号定义的字符串中,还需要对双引号 " 、美元符号 $ 等关键字符进行转义

2、变量的输出方式不同:使用单引号定义的字符串中所包含的变量会按照普通字符串输出;而使用双引号定义的字符串中所包含的变量会被自动替换为变量的值

  <?php
  ​
      //定义一个字符串型变量,并赋值为“this is a string”。
  ​
      $str = 'this is a string';
  ​
      echo '使用单引号输出:$str';    //显示信息。
  ​
      echo '<br/>';    //换行。
  ​
      echo "使用双引号输出:$str";   //显示信息。
  ​
  ?>
1545314316426.png

界定符

使用界定符定义字符串,即使用一对 <<<str str; 将字符串的字符包含在内,其中 str 为指定的标识符。

<?php
      //定义一个字符串型变量,并赋值为“this is a string”。
  ​
      $str = <<<std
  ​
      this is a string
  ​
  std;
  ​
      echo $str;    //显示信息。
  ​
  ?>

标识符前如果出现其他符号或字符时会发生错误,因此结束标识符必须单独另起一行,且不允许有空格。

integer

整型(integer)数据类型用于存放整数,且只能存放整数,存放的整数可以为正数负数,也可以用十进制八进制十六进制来表示。

如果需要用八进制来表示整型,那么数字的前面必须加上“0”;而如果需要用十六进制来表示整型,那么数字的前面必须加上“0x”

如果在八进制中出现了非法数字(8和9),那么非法数字及其后的所有数字都会被忽略掉。

如果数值超过整型所能表示的最大范围(32位操作系统中最大的整型数值为2147483647,64位操作系统中最大的整型数值为9223372036854775807),就会被当作浮点型处理,而这种情况被称为整数溢出。

 <?php
  ​
      //定义一个用十进制表示的整型变量。
  ​
      $num1 = 1234567890;
  ​
      //定义一个用八进制表示的整型变量。
  ​
      $num2 = 01234567890;
  ​
      //定义一个用八进制表示的整型变量。
  ​
      $num3 = 01234567;
  ​
      //定义一个用十六进制表示的整型变量。
  ​
      $num4 = 0x1234567890;
  ​
       //显示信息。
  ​
      echo '数值1234567890不同进制的输出结果:<br/>';
  ​
      echo '十进制的输出结果:'.$num1.'<br/>';
  ​
      echo '第一个八进制的输出结果:'.$num2.'<br/>';
  ​
      echo '第二个八进制的输出结果:'.$num3.'<br/>';
  ​
      echo '十六进制的输出结果:'.$num4;
  ​
  ?>

float

浮点型(float)数据类型用于存放数值,这个数值可以是超过整型范围的整数,也可以是小数。而浮点型数值的书写格式有两种:

1、标准格式:如3.1415、-34.56。

2、科学计数格式:如3.456E1、987.65E-3。

在PHP中浮点型数值只是一个近似值,要尽量避免在浮点型数值之间进行大小比较,因为比较的结果往往是不准确的。

  <?php
  ​
      //用标准格式定义一个浮点型变量。
  ​
      $num1 = 3.14159265359;
  ​
      //用科学计数格式定义一个浮点型变量。
  ​
      $num2 = 314159265359E-11;
  ​
      //显示信息。
  ​
      echo '圆周率的两种书写格式:<br/>';
  ​
      echo '标准格式:'.$num1.'<br/>';
  ​
      echo '科学计数格式:'.$num2;
  ​
  ?>

复合数据类型

复合数据类型存储的是按照一定规则组成的元素类型的数据

在PHP中,可以使用array和object两种复合数据类型。

数组(array)

数组(array)是一组数据的集合,即将一系列数据组织起来,形成一个可操作的整体,这些数据可以是标量数据数组对象资源等。

数组中的每个数据都被称为一个“元素”,元素包括“索引(键名)”和“值”两个部分,而在PHP中索引可以由数值(数字索引)或字符串(关联索引)组成,而值则可以是多种数据类型

在PHP中,定义数组的语法格式有三种:

1、$array = array('value1', 'value2',……);

2、$array[key] = 'value';

3、$array = array(key1 => 'value1',key2 => 'value2', ……);

其中,“key”为数组元素的索引,“value”为数组元素的值。

<?php
  ​
      $arr1 = array('this', 'is', 'an','array');    //定义一个数组。
  ​
      print_r($arr1);    //输出数组结构。
  ​
      echo '<br/>';    //换行。
  ​
      //定义一个数组。
  ​
      $arr2[0] = 'this';
  ​
      $arr2[1] = 'is';
  ​
      $arr2[2] = 'an';
  ​
      $arr2[3] = 'array';
  ​
      print_r($arr2);    //输出数组结构。
  ​
      echo '<br/>';    //换行。
  ​
      //定义一个数组。
  ​
      $arr3 = array(0 => 'this', 1=> 'is', 2 => 'an', 3 => 'array');
  ​
      print_r($arr3);    //输出数组结构。
  ​
  ?>

对象(object)

对象(object)就是一组数据和与这组数据相关的操作封装在一起而形成的一个实体。

特殊数据类型

在PHP中,可以使用resource和null两种特殊数据类型。

资源(resource)

资源(resource)是一种特殊变量,又称为“句柄”,是对外部资源的一个引用,即需要通过专门的函数来建立和使用,主要用于文件操作、连接数据库或创建图形画布区域等。

在PHP中,系统会自动启动垃圾回收机制,即自动释放不再使用的资源,避免内存被消耗殆尽,提高应用程序的运行速度。因此,PHP很少需要手工释放资源。

空值(null)

空值(null)表示没有为变量设置任何值。在PHP中,变量为空值的情况有三种:

1、在定义变量时,没有为变量赋任何值。

2、变量被赋值为空值。

3、被“unset()”函数处理过的变量。

在PHP中,空值不区分大小写,即“null”和“NULL”的效果是一样的。

  <?php
  ​
      $null1;    //定义一个变量,但不为其赋值。
  ​
      if (is_null($null1))    //判断变量是否为空值。
  ​
          echo '$null1为空值。<br/>';   //显示结果。
  ​
      $null2 = null;    //定义一个变量,并为其赋空值。
  ​
      if (is_null($null2))    //判断变量是否为空值。
  ​
          echo '$null2为空值。<br/>';   //显示结果。
  ​
      $null3 = '空值';    //定义一个变量,并为其赋为“空值”。
  ​
      unset($null3);    //释放变量$null3。
  ​
      if (is_null($null3))    //判断变量是否为空值。
  ​
          echo '$null3为空值。';    //显示结果。
  ​
  ?>

检测数据类型

有时根据功能要求,需要检测某个数据属于哪种类型,这时可以通过检测数据类型函数分别针对不同数据类型的数据进行检测,从而判断数据是否属于某个数据类型,即如果符合返回true,否则返回false

针对上述八种数据类型,PHP分别提供了九种基本的检测数据类型的函数:

1、“is_bool()”函数:检测变量是否属于布尔型。

2、“is_string()”函数:检测变量是否属于字符串型。

3、“is_numeric()”函数:检测变量是否是由数字组成的字符串。

4、“is_integer()”函数:检测变量是否属于整型。

5、“is_float()”函数:检测变量是否属于浮点型。

6、“is_null()”函数:检测变量是否为空值。

7、“is_array()”函数:检测变量是否属于数组类型。

8、“is_object()”函数:检测变量是否属于对象类型。

9、“is_resource()”函数:检测变量是否属于资源类型。

  <?php
      $boo = true;    //定义一个布尔型变量。
  ​
      if (is_bool($boo))    //判断变量是否属于布尔型。
  ​
          echo '$boo为布尔型。<br/>';   //显示结果。
  ​
      $str = '123';    //定义一个字符串型变量。
  ​
      if (is_string($str))    //判断变量是否属于字符串型。
  ​
          echo '$str为字符串型。<br/>';   //显示结果。
  ​
      //判断变量是否是由数字组成的字符串。
  ​
      if (is_numeric($str))
  ​
          //显示结果。
  ​
          echo '$str是由数字组成的字符串。<br/>';
  ​
      $num1 = 123;    //定义一个整型变量。
  ​
      if (is_integer($str))    //判断变量是否属于整型。
  ​
          echo '$num1为整型。<br/>';   //显示结果。
  ​
      $num2 = 1.23;    //定义一个浮点型变量。
  ​
      if (is_float($num2))    //判断变量是否属于浮点型。
  ​
          echo '$float为浮点型。<br/>';   //显示结果。
  ​
      $null;    //定义一个变量,但不为其赋值。
  ​
      if (is_null($null))    //判断变量是否为空值。
  ​
          echo '$null为空值。<br/>';   //显示结果。
  ​
      $arr = array('this', 'is', 'an', 'array');    //定义一个数组。
  ​
      if (is_array($arr))    //判断变量是否属于数组类型。
  ​
          echo '$arr为数组。';    //显示结果。
  ​
  ?>

转换数据类型

虽然PHP是一种弱类型的语言,但在实际应用中有时仍需要转换数据类型。在PHP中,转换数据类型的方法有两种:

1、在变量前加上括号,并在括号中写入类型名称。

2、使用“settype()”函数转换数据类型,语法格式如下:

bool settype(mixed var, stringtype);

settype()函数的返回值为布尔值,即转换成功返回“true”,否则返回“false”。其中“var”为需要改变数据类型的变量;“type”为需要变成的数据类型。

  <?php
  ​
      $str = '123.456';    //定义一个字符串型变量。
  ​
      $num = (float)$str;    //将字符串型变量转换为浮点型。
  ​
      if (is_float($num))    //判断变量是否属于浮点型。
  ​
          echo '$num为浮点型。<br/>';   //显示结果。
  ​
      echo '$num = '.$num.'<br/>';    //显示结果。
  ​
      //将浮点型变量转换为整型。
  ​
      $boo = settype($num, 'integer');
  ​
      if ($boo)    //判断是否转换成功。
  ​
          echo '转换成功!<br/>';   //显示结果。
  ​
     else
  ​
          echo '转换失败!<br/>';   //显示结果。
  ​
      if (is_integer($num))    //判断变量是否属于整型。
  ​
          echo '$num为整型。<br/>';   //显示结果。
  ​
      echo '$num = '.$num;    //显示结果。
  ​
  ?>

转换数据类型时,是从最左边的一个字符开始进行转换,并只转换符合说要转换类型要求的部分,即如果出现非法字符,非法字符及其后的字符都会被忽略掉,比如:浮点型变量转换为整型时,小数部分会被舍去;字符串型变量转换为整型或浮点型时,如果以数字开头就截取到非数字位,否则为“0”。

将变量转换成布尔型时,“null”和“0”会被转换为“false”,其他则转换为“true”;而布尔型变量转换为整型时,“false”转换为“0”,“true”转换为“1”。

常量(重点)

常量存放的是值不变化的、固定的数据,即在脚本的其他任何位置都不能修改常量的值,比如:圆周率、自然对数底和牛顿引力等。

声明常量

在PHP中,需要使用“define()”函数来声明常量,语法格式如下:

bool define(string name, mixedvalue[, bool $case_insensitive]);

“define()”函数,如果声明成功则返回“true”,否则返回“false”。其中“name”为常量名;“value”为常量值;“$case_insensitive”为可选参数,用于指定常量名是否大小写敏感。

使用常量

在PHP中,获取常量的值有两种方法:

(1)使用常量名直接获取常量值。

(2)使用“constant()”函数获取常量值,语法格式如下:

mixed constant(string $name);

constant()函数的返回值为常量值。其中“$name”为常量名或存储常量名的变量。

如果常量未定义,使用constant()函数获取常量值时,系统会报出错误提示,因此通常使用constant()函数之前需要判断常量是否已经定义。

constant()函数和直接使用常量名输出的效果是一样的,但是使用constant()函数可以通过变量动态地输出不同的常量值,在使用上要灵活很多。

判断常量是否被定义

在PHP中,使用“defined()”函数判断常量是否被定义,语法格式如下:

bool defined(string $name);

“defined()”函数,如果常量已经被定义则返回“true”,否则返回“false”。其中“$name”为常量名或存储常量名的变量。

 <?php
  ​
      define(CONSTANT, '常量');    //定义一个常量。
  ​
      //定一个字符串型变量,存放常量名。
  ​
      $name = 'CONSTANT';
  ​
      echo CONSTANT. '<br/>';    //显示结果。
  ​
      //判断常量是否被定义。
  ​
     $boo = defined($name);
  ​
     if ($boo)
  ​
      {
  ​
          echo '常量已被定义!<br/>';   //显示结果。
  ​
          echo constant($name);    //显示结果。
  ​
      }
  ​
  ?>

预定义常量

在PHP中,除了可以声明自定义常量外,还可以使用预定义常量来获取PHP中的信息,常用的预定义常量如下表所示。

预定义常量 描述
FILE 默认常量,PHP程序文件名
LINE 默认常量,PHP程序行数
PHP_VERSION 内建常量,PHP程序的版本
PHP_OS 内建常量,执行PHP解析器的操作系统名称
TRUE 真值
FALSE 假值
NULL 空值
E_ERROR 指到最近的错误处
E_WARNING 指到最近的警告处
E_PARSE 指到解析语法有潜在问题处
E_NOTICE 发生不寻常处的提示,但不一定是错误处

FILE”和“LINE”中的“__”是两条下划线,而不是一条下划线。

表中以“E_”开头的预定义常量是PHP的错误调试部分。如需详细了解,请参考“error_reporting()函数”。

使用预定义常量的方法与使用自定义常量的方法相同,没有什么差别。

变量(重点)

变量与常量正好相反,它用于存放的是可变的数据,即在程序执行过程中变量的值可以发生变化

声明和使用变量

在声明变量时,系统会为程序中的每一个变量分配一个存储单元,这些变量都是使用“变量名”来标识,即变量名实质上就是计算机内存单元的名称,因此通过变量名即可访问内存中的数据。

在PHP中,使用变量之前并不需要进行声明,即只需要为变量赋值,而PHP的变量名用“$”和标识符表示,且区分大小写。

变量名的标识符不能以数字字符开头,也不能以字母和下划线以外的其他字符开头。

变量赋值就是给变量一个具体的数据值,通常是通过赋值运算符来实现的,在PHP中为变量赋值的方法有三种:

1、直接赋值:直接将数据值赋值给变量。

2、变量间赋值:将一个变量的数据值赋值给另一个变量。

3、引用赋值:使用“&”符号将一个变量的内存地址传给另一个变量,即再为该内存中的数据起一个“别名”。当改变其中一个变量的值时,另一个变量也会跟着发生变化。

变量间赋值和引用赋值之间的区别在于,变量间赋值是开辟一个新的内存空间,并复制原变量内容;引用赋值这是给原变量内容另起一个变量名,二者使用的是同一内存空间。‍‍

  <?php
  ​
  ​
      $str1 = 'str1';    //直接赋值。
  ​
     echo '$str1的值:'.$str1.'<br/>';    //显示结果。
  ​
      $str2 = $str1;    //变量间赋值。
  ​
     echo '$str2的值:'.$str2.'<br/>';    //显示结果。
  ​
      $str3 = & $str1;    //引用赋值。
  ​
     echo '$str3的值:'.$str3.'<br/>';    //显示结果。
  ​
      $str1 = 'str2';    //修改变量的值。
  ​
     echo '$str1的值:'.$str1.'<br/>';    //显示结果。
  ​
     echo '$str2的值:'.$str2.'<br/>';    //显示结果。
  ​
     echo '$str3的值:'.$str3;    //显示结果。
  //定义一个值为“str1”变量“$str1”,然后将该变量的值赋值给另一个变量“str2”,再将该变量引用给另一个变量“$str3”,最后输出结果。
  ?>

变量的作用域

变量的作用域是指能够使用变量的有效范围变量必须在其有效范围内使用,否则就会失去其意义。在PHP中,变量的作用域有三种:

1、局部变量:变量定义在函数内部,其作用域为所在函数。

注意:局部变量在函数调用结束以后,其存储的数据就会被立即清除,内存空间也会被释放。

2、全局变量:变量定义在所有函数以外,其作用域为整个PHP文件。

注意:如果需要在自定义函数内部使用全局变量,那么则要使用关键字“global”在调用全局变量时进行声明。

3、静态变量:能够在函数调用结束之后保留变量值,当再次回到其作用域时,可以继续使用保留的变量值。

注意:静态变量需要使用关键字“static”来进行声明。

  <?php
  ​
      //定义一个全局变量。
  ​
      $str = '全局变量:在函数以外输出。';
  ​
      //定义一个自定义函数。
  ​
     function example()
  ​
      {
  ​
          //定义一个局部变量。
  ​
          $str = '局部变量:调用函数时输出。';
  ​
          echo $str.'<br/>';    //显示结果。
  ​
      }
  ​
      example();    //调用函数。
  ​
     echo $str;    //显示结果。
  //在函数内外定义并输出变量名相同的局部变量“局部变量:调用函数时输出”和全局变量“全局变量:在函数以外输出”。
  ?>
  <?php
  ​
  ​
      $str = '全局变量';    //定义一个全局变量。
  ​
      //定义一个自定义函数。
  ​
     function example()
  ​
      {
  ​
          echo '直接使用全局变量:'.$str.'<br/>';    //显示结果。
  ​
          global $str;    //使用关键字“global”调用全局变量。
  ​
          echo '通过global使用全局变量:'.$str;    //显示结果。
  ​
      }
  ​
      example();    //调用函数。
  //在自定义函数内使用并输出值为“全局变量”的全局变量。
  ?>
  <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个自定义函数。
  ​
     function example1()
  ​
      {
  ​
          $num = 0;    //定义一个普通变量。
  ​
          $num++;    //递增。
  ​
          echo $num.' ';    //显示结果。
  ​
      }
  ​
      //定义一个自定义函数。
  ​
     function example2()
  ​
      {
  ​
          static $num = 0;    //定义一个静态变量。
  ​
          $num++;    //递增。
  ​
          echo $num.' ';    //显示结果。
  ​
      }
  ​
      echo '普通变量输出:';    //显示结果。
  ​
      //循环10次。
  ​
      for ($i = 0; $i < 10; $i++)
  ​
      {
  ​
          example1();    //调用函数。
  ​
      }
  ​
      echo '<br/>静态变量输出:';    //显示结果。
  ​
      //循环10次。
  ​
      for ($i = 0; $i < 10; $i++)
  ​
      {
  ​
          example2();    //调用函数。
  ​
      }
  //分别使用普通变量和静态变量在自定义函数中输出递增数字。
  ?>

可变变量

可变变量是一种非常特殊的变量,它允许动态地改变一个变量的名称,即可变变量的名称由另一个变量的值来确定。

在PHP中,在变量的前面再加上一个“$”即可实现可变变量。

  <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      $str1 = 'str2';    //定义一个字符串型变量。
  ​
      $str2 = '可变变量';    //定义一个字符串型变量。
  ​
      echo '$str1的值:'.$str1.'<br/>';    //显示结果。
  ​
      echo '$str2的值:'.$str1.'<br/>';    //显示结果。
  //定义并输出一个值为“可变变量”的可变变量。
  ?>

‍‍说明:“$$str1”为可变变量,在执行时,首先将“str1”解析为值“str2”,然后再解析“str2”,最后将值输出。‍‍

预定义变量

在PHP中,除了可以使用自定义变量外,还可以使用预定义变量来获取用户会话、用户操作系统环境和本地操作系统环境等信息,常用的预定义变量如下表所示。

预定义变量 描述
$_SERVER['SERVER_ADDR'] 当前运行脚本所在服务器的IP地址
$_SERVER['SERVER_NAME'] 当前运行脚本所在服务器的主机名
$_SERVER['SERVER_POST'] 服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] 包含服务器版本和虚拟主机名的字符串
$_SERVER['REQUEST_METHOD'] 访问页面时的请求方法
$_SERVER['REMOTE_ADDR'] 正在浏览当前页面用户的IP地址
$_SERVER['REMOTE_HOST'] 正在浏览当前页面用户的主机名
$_SERVER['REMOTE_PORT'] 用户连接到服务器时所使用的端口
$_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径名
$_SERVER['DOCUMENT_ROOT'] 指当前运行脚本所在的文档根目录
$_COOKIE 通过HTTPCookie传递到脚本的信息
$_SESSION 包含与所有会话变量有关的信息
$_POST 包含通过POST方法传递的参数的相关信息
$_GET 包含通过GET方法传递的参数的相关信息
$GLOBALS 由所有已定义全局变量组成的数组

运算符(重点)

算数运算符

算术运算符就是处理算术运算的符号,即对数字数据进行取余等运算。算术运算符是数字处理中应用最多的、最常用的运算符,PHP中的算术运算符如下表所示。

运算符 说明 示例
+ 加法运算符 a +b
- 减法运算符 a -b
* 乘法运算符 a *b
/ 除法运算符 a /b
% 取余运算符 a %b
++ 递增运算符 a++、++a
-- 递减运算符 a--、--a

‍‍说明:使用“%”取余时,如果被除数($a)是负数,那么得到的结果也是负数。‍‍

‍‍说明:递增/递减运算符有两种使用方法,一种是将运算符放在变量后面,即先返回变量的当前值,再见变量的当前值增加/减少1;另一种是将运算符放在变量前面,即先将变量增加或减少1,再赋值给原变量。‍‍

  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num1 = 10;    //定义一个整型变量。
  ​
     $num2 = 5;    //定义一个整型变量。
  ​
     $num3 = 3;    //定义一个整型变量。
  ​
     $num4 = 2;    //定义一个整型变量。
  ​
      //显示结果。
  ​
     echo '$num1 = '.$num1.', $num2 = '.$num2\. ', $num3 = '.$num3\. ', $num4 ='.$num4.'<br/>';
  ​
     echo '$num1 + $num2 = '.($num1 + $num2).'<br/>';
  ​
     echo '$num1 - $num2 = '.($num1 - $num2).'<br/>';
  ​
     echo '$num3 * $num4 = '.($num3 * $num4).'<br/>';
  ​
     echo '$num1 / $num4 = '.($num1 / $num4).'<br/>';
  ​
     echo '$num1 % $num3 = '.($num1 % $num3).'<br/>';
  ​
     echo '$num1++ = '.$num1++.'<br/>';
  ​
     echo '$num2-- = '.$num2--.'<br/>';
  ​
     echo '++$num3 = '.++$num3.'<br/>';
  ​
     echo '--$num4 = '.--$num3;
  //使用算术运算符对四个值分别为“10”、“5”、“3”和“2”的变量进行算术运算。
  ?>
  

​```

字符串运算符

字符串运算符的作用是将两个字符串连接起来,并结合成一个新的字符串。在PHP中,字符串运算符只有一个,即英文句号“.”。

注意:与C语言和Java语言不同,PHP中的“+”只能作为算术运算符使用,而不能作为字符串运算符。

  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $str1 = '字符串';    //定义一个字符串型变量。
  ​
     $str2 = '运算符';    //定义一个字符串型变量。
  ​
      //显示结果。
  ​
     echo '$str1 = '.$str1.', $str2 = '.$str2.'<br/>';
  ​
     echo '$str1.$str2 = '.($str1.$str2);
  //使用字符串运算符连接值为“字符串”和“运算符”两个字符串变量,并输出组合成的新字符串。
  ?>

赋值运算符

赋值运算符的作用是将右边的值赋值给左边的变量。PHP中的赋值运算符如下表所示。

运算符 说明 示例 展开形式
= 赋值 a =b a =b
+= 加赋值 a +=b a =a + $b
-= 减赋值 a -=b a =a - $b
*= 乘赋值 a *=b a =a * $b
/= 除赋值 a /=b a =a / $b
%= 取余赋值 a %=b a =a % $b
.= 连接赋值 a .=b a =a.$b
 <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num = 1;    //将“1”赋值给变量“$num”。
  ​
     echo '$num = '.$num.'<br/>';   //显示结果。
  ​
     $num += 1;    //将“$num”加“1”后赋值给“$num”。
  ​
     echo '$num += 1的结果:'.$num.'<br/>';    //显示结果。
  ​
     $num -= 1;    //将“$num”减“1”后赋值给“$num”。
  ​
     echo '$num -= 1的结果:'.$num.'<br/>';    //显示结果。
  ​
     $num *= 2;    //将“$num”乘“2”后赋值给“$num”。
  ​
     echo '$num *= 2的结果:'.$num.'<br/>';    //显示结果。
  ​
     $num /= 2;    //将“$num”除“2”后赋值给“$num”。
  ​
     echo '$num /= 2的结果:'.$num.'<br/>';    //显示结果。
  ​
      //将“$num”除“2”取余后赋值给“$num”。
  ​
     $num %= 2;
  ​
     echo '$num %= 2的结果:'.$num.'<br/>';    //显示结果。
  ​
     $str = '赋值';    //定义一个字符串型变量。
  ​
     echo '$str = '.$str.'<br/>';   //显示结果。
  ​
      //将“$str”连接“运算符”后赋值给“$str”。
  ​
     $str .= '运算符';
  ​
     echo '$str .= \'运算符\'的结果:'.$str;    //显示结果。
  ​
  ?>

逻辑运算符

逻辑运算符的作用是将多个逻辑命题连接成更复杂的逻辑命题,从而进行实现逻辑判断,主要用在条件控制语句的判断表达式中。PHP中的逻辑运算符如下表所示。

运算符 说明 示例 结果为真
&&或and a &&b或a andb a和b都为真
||或or a ||b或a orb a为真或b为真
xor 异或 a xorb a、b一真一假
! !$a $a为假

注意:“&&”与“and”、“||”与“or”虽然能够进行同样的逻辑运算,但是它们之间的优先级是不同的。

<?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $boo1 = true;    //定义一个布尔型变量。
  ​
     $boo2 = false;    //定义一个布尔型变量。
  ​
      //显示结果。
  ​
     echo '$boo1 = '.var_export($boo1, true).', $boo2 = '.var_export($boo2,tru
  ​
  e).'<br/>';
  ​
     echo '$boo1 && $boo2 = '.var_export($boo1 && $boo2,true).'<br/>';
  ​
     echo '$boo1 && $boo1 = '.var_export($boo1 && $boo1,true).'<br/>';
  ​
     echo '$boo2 && $boo2 = '.var_export($boo2 && $boo2,true).'<br/>';
  ​
     echo '$boo1 || $boo2 = '.var_export($boo1 || $boo2, true).'<br/>';
  ​
     echo '$boo1 || $boo1 = '.var_export($boo1 || $boo1, true).'<br/>';
  ​
     echo '$boo2 || $boo2 = '.var_export($boo2 || $boo2, true).'<br/>';
  ​
     echo '$boo1 xor $boo2 = '.var_export($boo1 xor $boo2, true).'<br/>';
  ​
     echo '$boo1 xor $boo1 = '.var_export($boo1 xor $boo1, true).'<br/>';
  ​
     echo '$boo2 xor $boo2 = '.var_export($boo2 xor $boo2, true).'<br/>';
  ​
     echo '!$boo1 = '.var_export(!$boo1, true);
  ​
  ?>

比较运算符(重点)

比较运算符的作用是对变量或表达式的结果进行大小、真假等的比较,如果比较结果为真,则返回“true”,如果比较结果为假,则返回“false”。PHP中的比较运算符如下表所示。

运算符 说明 示例
< 小于 a <b
> 大于 a >b
<= 小于等于 a <=b
>= 大于等于 a >=b
== 相等 a ==b
!= 不等 a !=b
=== 恒等 a ===b
!== 非恒等 a !==b

说明:恒等“===”表示变量不仅在数值上相等,而且数据类型也是一致的;非恒等“!==”表示变量数值或数据类型不同。

 <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num = 3;    //定义一个整型变量。
  ​
      //显示结果。
  ​
     echo '$num = '.$num.'<br/>';
  ​
     echo '$num < 4的结果:'.var_export($num < 4, true).'<br/>';
  ​
     echo '$num > 2的结果:'.var_export($num > 2, true).'<br/>';
  ​
     echo '$num <= 4的结果:'.var_export($num <= 2, true).'<br/>';
  ​
     echo '$num >= 2的结果:'.var_export($num >= 2, true).'<br/>';
  ​
     echo '$num == 3的结果:'.var_export($num == 3, true).'<br/>';
  ​
     echo '$num != 2的结果:'.var_export($num == 2, true).'<br/>';
  ​
     echo '$num === 3的结果:'.var_export($num == 3, true).'<br/>';
  ​
     echo '$num !== \'3\'的结果:'.var_export($num !== '3', true);
  ​
  ?>

错误控制运算符(重点)

错误控制运算符是PHP中独特的一种运算符,其作用是对程序中出现错误的表达式进行操作,即对错误信息进行屏蔽。在PHP中,在错误的表达式前面加上错误控制运算符“@”即可屏蔽错误信息。

注意:错误控制运算符只能屏蔽错误信息,而不能真正地解决错误。因此错误控制运算符通常用来屏蔽一些不影响程序运行的非必要错误信息,而影响程序运行的重要错误信息不推荐使用。

  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num1 = (5 / 0);    //定义一个整型变量。
  ​
     $num2 = @ (5 / 0);    //定义一个整型变量。
  ​
  ?>
1545315660799.png

三元运算符

三元运算符,也成为三目运算符,其作用是根据一个表达式在另外两个表达式中选择一个来执行,语法格式如下:

表达式1?表达式2:表达式3;

如果表达式1的结果为真,执行表达式2,如果表达式1的结果为假,则执行表达式3。

‍‍说明:三元运算符最好放在括号中使用。‍‍

 <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //显示结果。
  ​
     echo (true?'表达式1为真':'表达式1为假');
  ​
      echo '<br/>';
  ​
     echo (false?'表达式1为真':'表达式1为假');
  ​
  ?>

位运算符

位运算符的作用将二进制位从低位到高位对齐后进行运算。PHP中的位运算符如下表所示。

运算符 说明 示例
& 按位与 a &b
| 按位或 a |b
^ 按位异或 a ^b
~ 按位取反 ~$a
<< 向左移位 a <<b
>> 向右移位 a >>b
 <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      $num1 = 13;    //定义一个整型变量。
  ​
      $num2 = 11;    //定义一个整型变量。
  ​
      //显示结果。
  ​
     echo '$num1 = '.$num1.', $num2 = '.$num2.'<br/>';
  ​
     echo '$num1 & $num2 = '.($num1 & $num2).'<br/>';
  ​
     echo '$num1 | $num2 = '.($num1 | $num2).'<br/>';
  ​
     echo '$num1 ^ $num2 = '.($num1 ^ $num2).'<br/>';
  ​
     echo '~$num1 = '.(~$num1).'<br/>';
  ​
     echo '$num1 << 1 = '.($num1 << 1).'<br/>';
  ​
     echo '$num1 >> 1 = '.($num1 >> 1);
  ​
  ?>

说明:“13”的二进制原码为“0000 1101”,“11”的二进制原码为“0000 1011”,“9”的二进制原码为“0000 1001”,“15”的二进制原码为“0000 1111”,“6”的二进制原码为“0000 0110”,“-14”的二进制补码为“1111 0010”,“26”的二进制原码为“0001 1010”。

运算符的优先级

表达式可能是由多个不同的运算符连接起来的,不同的运算符顺序可能得出不同结果,甚至出现错误运算错误,因此必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。

运算符优先级就是在表达式中哪一个运算符先计算、哪一个后计算,其遵循的规则是:

1、优先级高的操作先执行,优先级低的操作后执行。

2、同一优先级的操作按照从左到右的顺序执行。

3、括号内的操作最先执行。

‍‍说明:由于括号的优先级最高,因此在运算符较多的表达式中,不妨多使用括号。‍‍

运算符的优先级

优先级别 运算符 结合方向
1 ++、--、~、@
2 !
3 *、/、%
4 +、-
5 <<、>>
6 <、<=、>、>=
7 ==、!=、===、!==
8 &
9 ^
10
11 &&
12
13 ?:
14 =、+=、-=、*=、/=、.=、%=
15 and
16 xor
17 or

‍‍说明:优先级别的数值越小,运算符的优先级越高。‍‍

表达式和函数

表达式

表达式是通过具体的代码来实现的,即由多个符号集合起来组成的代码,是构成PHP程序语言的基本元素,也是PHP最重要的组成元素。

组成表达式的符号是对PHP解释程序有具体含义的最小单元,可以是变量名、函数名、运算符和数值等。

表达式和语句之间的区别在于分号“;”,即一个表达式之后加上一个分号之后就是一条语句

注意:在编写程序时,必须注意不要漏写语句的分号“;”。

函数

函数就是将一些需要重复使用的功能代码写在一个独立的代码块中,并在需要时单独调用

在PHP中,使用关键字“function”定义函数,语法格式如下:

functionfun_name([mixed arg1[, mixed…]])

{

fun_body;

}

其中“fun_name”为函数名;“arg1”和“…”为函数的参数;“fun_body”为函数的主体,即功能实现代码。

在函数定义好之后,只需要使用函数名并赋予正确的参数,即可调用函数,语法格式如下:

fun_name([mixed arg1[, mixed…]]);

其中“fun_name”为函数名;“arg1”和“…”为赋予函数的参数。

<?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function example($str)
  ​
      {
  ​
          echo $str;    //显示结果。
  ​
      }
  ​
      example('定义和调用函数');    //调用函数。
  ​
  ?>

定义函数时,还有一种参数的设置方式,即可选参数,也就是可以指定某个参数为可选参数。在PHP中,将参数放在参数列表末位,并指定其默认值,即可指定可选参数。

调用函数时,如果设置了可选参数值,那么可选参数的值为调用时的设定值;如果没有设置可选参数值,那么可选参数的值为定义时的默认值。

  <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function example($num1, $num2 =2)
  ​
      {
  ​
          //显示结果。
  ​
          echo '$num1 = '.$num1.',$num2 = '.$num2.'<br/>';
  ​
          echo '$num1 * $num2 * 2 ='.($num1 * $num2 * 2);
  ​
      }
  ​
      echo 'exmaple(1,3)<br/>';    //显示结果。
  ​
      example(1, 3);    //调用函数。
  ​
      echo '<br/>';    //换行。
  ​
      echo'exmaple(1)<br/>';    //显示结果。
  ​
      example(1);    //调用函数。
  ​
  ?>

数据是如何在函数间传递的?

在定义和调用函数时存在着两种参数:形参和实参。形参是定义函数时定义的参数;实参是调用函数时传入的参数。也就是说,调用函数时,需要将实参的值传递给形参。在PHP中,实参与形参之间数据传递的方式有两种:

1、按值传递:按值传递就是将实参的值赋值给对应的形参,在函数主体的操作都是针对形参进行,操作的结果不会影响到实参,即函数返回之后,实参的值不会改变

  <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function example($num)
  ​
      {
  ​
          $num *= 2;    //进行算术运算。
  ​
          echo '形参:$num = '.$num.'<br/>';    //显示结果。
  ​
      }
  ​
      $num = 1;    //定义一个整形变量。
  ​
     echo '实参:$num = '.$num.'<br/>';   //显示结果。
  ​
      example($num);    //调用函数。
  ​
     echo '函数调用之后的实参:$num = '.$num;    //显示结果。
  ​
  ?>

2、按引用传递:按引用传递就是将实参的内存地址传递给对应的形参,在函数主体针对形参进行的操作都会影响到实参,即函数返回之后,实参的值会发生改变。引用传递参数的方式需要在定义函数时在形参前面加上“&”符号。

<?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function example(&$num)
  ​
      {
  ​
          $num *= 2;    //进行算术运算。
  ​
          echo '形参:$num = '.$num.'<br/>';    //显示结果。
  ​
      }
  ​
      $num = 1;    //定义一个整形变量。
  ​
     echo '实参:$num = '.$num.'<br/>';    //显示结果。
  ​
      example($num);    //调用函数。
  ​
     echo '函数调用之后的实参:$num = '.$num;    //显示结果。
  ​
  ?>

返回函数的操作结果

在实际开发中,经常需要将函数的操作结果返回给调用者。在PHP中,通常使用关键字“return”来返回函数的操作结果,语法格式如下:

return mixed $value;

“return”会将程序控制权返回到调用者的作用域,并将函数的操作结果“$value”返回给调用者。

注意:关键字“return”只能返回一个值,如果需要函数返回多个值,可以使用数组来返回值。

注意:如果在全局作用域中使用关键字“return”,那么会终止脚本的执行。

变量函数

变量函数和可变变量非常相似,可以通过变量来调用,即根据变量的值来调用相应的函数。

在PHP中,在变量名后面加上一对小括号,并在其中赋予正确的参数,即可实现变量函数。

  <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function example()
  ​
      {
  ​
          echo '变量函数';    //显示结果。
  ​
     }
  ​
      $str = 'example';    //定义一个字符串型变量。
  ​
     $str();    //调用变量函数。
  ​
  ?>

‍‍说明:“str()”为变量函数,在执行时,首先将“str”解析为值“example”,然后再调用函数“example()”。‍‍

引用函数

<?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function &example()
  ​
      {
  ​
          return '引用函数';    //返回结果。
  ​
      }
  ​
      $str = &example();    //对函数进行引用。
  ​
     echo $str;    //显示结果。
  ​
  ?>

当不需要对函数继续引用时,可以使用“unset()”函数取消对函数的引用。

  <?php
  ​
      //设置编码格式,正确显示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定义一个函数。
  ​
      function &example()
  ​
      {
  ​
          return '引用函数';    //返回结果。
  ​
      }
  ​
      $str = &example();    //对函数进行引用。
  ​
     echo $str.'<br/>';    //显示结果。
  ​
     unset($str);    //取消引用。
  ​
     echo $str;    //显示结果。
  ​
  ?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342