Fork me on GitHub

PHP基础语法

目标

  1. 简单了解后端开发的流程,了解后端工作人员如何对数据进行处理,以便将来在工作中能更好的跟后端开发人员交流。

  2. 了解B/S架构开发的基本流程,能开发动态网站,并体会动态网站和静态网站的不同。

  3. 多了解一门编程语言,体会不同语言之间的异同。

前瞻知识点

  • B/S结构的处理流程
  • 网络基本概念
    • IP
    • 域名
    • DNS
      • 网络DNS
      • 本地DNS
    • 端口
  • 安装WAMP环境
    • W – web, A – Apache , M – MySql ,P – PHP

hello world

  • 所有PHP代码都放在标记: <?php …… ?>

  • PHP输出方式:echo

    1
    echo 'hello world'
  • 注释

    • / 多行注释 /
      • 多行注释不要嵌套
    • // 单行注释
  • 语句分隔符 “;”

  • PHP文件访问方式

PHP简介

  • PHP Hypertext Preprocessor 超文本预处理器,是嵌入到HTML文件中的服务器端的脚本语言;
  • 一个PHP文件中,可以包含多种代码:HTML、CSS、JS、Jquery、PHP、MySQL等
  • PHP的语法,与C、Java、Python、JS语法比较相似;
  • PHP是服务器端的脚本语言,脚本语言相对编程语言来说,要简单的多。
  • PHP程序只能运行在服务器端,在客户端看不见PHP任何代码;
  • PHP文件的扩展名是以.php为后缀的。

语言基础

  • PHP与ASP、JSP一样,都是嵌入到HTML文件中的服务器端的脚本语言;
  • PHP文件的后缀是.php
  • PHP代码的标记:<?php …… ?>
  • PHP中每行程序代码,必须以英文下的分号结束;

输出时间

1
echo date('Y-m-d H:i:s');
  • 默认情况下PHP输出的时间是格林威治时间,比中国时区晚8个小时

  • 解决方案:

    • 1.0 找到PHP的配置文件 php.ini

    • 2.0 定位到 date.timezone

    • 3.0 设置中国时区

      1
      2
      ; PRC为中华人民共和国
      date.timezone = PRC

变量

特点

  • 变量是临时存储数据的容器;
  • 变量是存储在内存当中;
  • 网页执行完毕后,网页中相关的变量全部消失。

变量命名规则

  • 变量名称只能包含:字母、数字、下划线
  • PHP中的变量名必须以 “\$” 符号开头,但是”\$”符号不属于变量的一部分,将来不管是赋值还是取值,都必须加上”\$”
  • 变量名区分大小写
  • PHP中的变量使用不需要声明,直接赋值使用
  • 常用的两种命名方法:
    • 驼峰命名法
      • 第一个单词的首字母小写,其余单词的首字母全部大写
      • 如:userName,userId
    • 帕斯卡命名法:
      • 与驼峰命名法很像
      • 唯一区别是它的首字母是大写
      • 如:UserName,UserId
    • 下划线命名法
      • 所以的单词首字都小写,由下划线连接
      • 如:user_name,user_id

变量的声明与赋值

  • 声明
    • PHP中变量不需要声明,但是每个变量必须以$开
  • 赋值:
    • 直接给带有$的变量赋值
    • 使用“=”,赋值运算符给变量赋值,“=”读作赋值运算符
    • 赋值运算符的左边只能是一个变量名
    • 如:$userName = “张三”;

变量值的读取

  • 变量的数据类型由其中的内容决定

  • 直接以 “$+变量名”的方式 取得可以取得变量的值

    1
    $userName = "admin";
  • 可以使用“.”来连接将变量与字符串一起输出

    1
    echo "我的名字叫".$userName
  • 也可以在字符串的内部直接使用变量

    • 在PHP中“.”点表示相连
    • 在PHP中“+”加表示相加(是一种算术运算符)
    1
    2
    3
    4
    5
    6
    	echo "我的名字叫做$userName"
    但是,如果用引号时,变量后面还有其它的有文字,就不能解析了如
    echo "我的名字叫做$userName很高兴见到大家"
    这里就无法解析,需要在变量后面添加一个非空特殊字符,如:
    echo "我的名字叫做{$userNmae}很高兴见到大家"
    如果输出字符是单引号,则无法解析字符串

变量相关函数

  • header():设置服务器返回到浏览器的数据的类型

    1
    header('content-type:text/html;charset=utf-8');
  • isset() 判断变量是否存在

    • 可以用来判断变量是否定义,或者是否为null
  • empty() 判断变量是否为空

    • 如果 var 是非空或非零的值,则 empty() 返回 FALSE
    • “”0“0”NULLFALSEarray()var $var; 以及没有任何属性的对象都将被认为是空的,也就意味着,如果上述的数据用empty来判断返回的结果都为true
  • unset() 删除变量

    • 可以通过这个函数删除一个已经存在的变量,删除之后变量为null

    • 可以同步删除多个变量

    • 如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。(这个当我们学了全局变量与局部变量以后再说)

      1
      unset($a,$b,$c)
  • var_dump() 显示变量的类型和值

    • 可以同时打印多个变量
  • print_r() 显示数组的元素信息

    • 如果是字符串,数字,boolean值,会原样输出
    • 如果是数组,会详细打印数组信息

可变变量

  • 指一个变量的名称,由另一个变量的值来充当

    1
    2
    3
    4
    $a = "b";
    $b = "c";
    echo $b;//输出 c
    echo $$a;//输出 c
  • 如果使用可变变量,一定要加上给可变变量的变量名加上{}作为定界符

变量的值传递和引用传递

  • JS中的基本数据类型(只有一个值):字符串型、数值型、布尔型、undefined、null

  • JS中的复合数据类型(多个值):数组(Array)、对象(Object)、函数(Function)

  • 值传递:

    • 传递的是变量中保存的值
  • 引用传递

    • 传递的是变量保存的引用地址
  • 在PHP中可以使用 & 符号将值传递的变量改变为引用传递:如

    1
    2
    3
    4
    $a = "abc";
    $b = &$a;
    $a = "123";
    echo "$a<br/>$b"

常量

概念

  • 常量就是值永远不变的量,即:一旦赋值无法删除,修改。
  • 由于变量在使用时还需要去它存储的地址中去找到对应的数据,相比变量来说,常量的速度要快。(存储地址?)

命名规则

  • 与变量基本一致
    • 变量名称只能包含:字母、数字、下划线,常量也是
    • PHP中的常量不需要使用$符号开头
    • 常量名区分大小写,一般建议使用时尽量用大写,为了与变量区分开
    • 常用的两种命名方法:
      • 驼峰命名法
        • 第一个单词的首字母小写,其余单词的首字母全部大写
        • 如:uerName,userId
      • 下划线命名法
        • 所以的单词首字都小写,由下划线连接
        • 如:user_name,user_id

常量定义define()

  • 语法: bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

  • 案子:通过define关键来定义

    1
    2
    3
    define('TITLE',"中华人民共和国");//定义常量TITLE
    define('TITLE',"中华人民共和国",true);//加上true,使用时既可以使用TITLE,又可以使用小写title,来使用常量
    define('TITLE',"中华人民共和国",false);//加上false,使用时必须使用TITLE

判断是否是常量:defined()

  • 语法: bool defined ( string $name )

  • defined()可以判断常量

    1
    defined(“TITLE”);//通过defined判断常量时,常量一定要加上引号

魔术常量

  • 量的值在程序运行过程中不会改变。但是,魔术常量的值,会随着所在位置的不同而改变。
  • 魔术常量都由系统定义好的,我们直接使用就好了,常用的有:
    • __LINE__:得到当前代码的行号
    • __FILE__:得到当前文件的路径
    • __DIR__:得到当前文件所在目录
    • __FUNCTION__:得到所在函数

数据类型

  • 数据类型分类

    1
    2
    3
    4
    5
    js中的数据类型:
    简单数据类型:
    Number,string,bool,undefined
    复杂数据类型
    数组,对象,null
    • 基本数据类型:字符串型(string)、整型(int)、浮点型(float:小数)、布尔型(bool)
    • 复合数据类型:数组、对象
    • 特殊数据类型:资源、NULL
  • 数据类型判断

    • is_bool(),判断变量是不是布尔型

    • is_int(),判断变量是不是整型

    • is_string() 判断变量是不是字符串型

    • is_float() 判断变量是不是浮点型

    • is_numeric() 判断变量不是数值型或数字字符串。

    • is_array() 判断变量是不是数组

    • is_null() 判断变量是否为NULL

    • is_resource() 判断变量是不是资源型

      1
      2
      3
      4
      5
      6
      7
      8
      9
      //判断用户是否大于18岁,如果大于18岁,显示网页内容,如果没有,则不显示
      $age = 20;
      if(isset($age) && is_numeric($age)) {
      if($age >18) {
      echo('显示网页');
      } else {
      echo ('不显示');
      }
      }

整型

  • 关键字:int
  • 在js中所有的数字都用number来表示,但是在PHP,数字有不同的划分,其中整数(正整数,0,负整数)用整型来表示

    • 整型包含正整数、负整数、零0

    • 可以用10进制、八进制、16进制表示

      1
      2
      3
      echo 100;//十进制
      echo 011;//八进制,以0开头的整数,结果为9
      echo 0x9a;//十六进制,以0x开头,结果为154
    • PHP中最大整数:PHP_INT_MAX,(2^31)-1

  • 如果数字超出来了整数据范围,则类型会变为float

浮点型

  • 关键字:float
  • PHP中除了整数还有浮点型,一般浮点数会包含小数,比整型更加精确

  • 浮点型的范围:1.8E-308~1.8E+308

  • 注意点:

    • 如果要对浮点数进行操作,就好先将浮点数转为整数再处理

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      //以下做法不可取
      if(2.1/0.7 == 3) {
      echo '相等';
      } else {
      echo '不相等';
      }
      //以下是正确做法
      $a = 2.1 * 10;
      $b = 0.7 * 10;
      if($a/$b == 3) {
      echo '相等';
      } else {
      echo '不相等';
      }

字符串

  • 字符串定义的四种方式

    • 用单引号可以定义一个字符串;如:$a = ‘abc’;

      • 单引号内无法解析变量
      • 转义符号有:\’
    • 用双引号来定义一个字符串;如:$a = “abc”;

      • 双引号内可以解析变量
      • 转义符号有:\\、\’、\”、\$、\r、\n、\t
    • 定义长字符串:heredoc

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <?php
      header('content-type:text/html;charset=utf-8');
      $a = 'abc';
      $aa = <<<heredoc
      <html>
      123$a
      </html>
      heredoc;
      echo $aa;
      ?>
      • 使用注意:
        • 1)字符串放在两个heredoc标签之间
        • 2)以“<<<heredoc”作为开始,不用带分号
        • 3)以“heredoc;”作为结束,要带分号
        • 4)标签名称可以自定义
        • 5)结束标签必须放单独一行
    • 定义长字符串:nowdoc

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <?php
      header('content-type:text/html;charset=utf-8');
      $a = 'abc';
      $aa = <<<'nowdoc'
      <html>
      123$a
      </html>
      nowdoc;
      echo $aa;
      ?>
      • 使用注意:
        • 与上述一样,但是开始的标签名必须加单引
        • 不能解析变量

布尔型

  • 关键字:bool
  • 概念
    • true表示真,flase表示假
  • 转换:
    • 0,””,NULL,0.0,”0”,arry() 空数组会转为false
    • 其它的数据都会转为true

空型

  • 用null表示,表示没有
  • 以下情况会出现NULL
    • 可以直接给一个变量,赋一个NULL值;
    • 未定义的变量的值,也是NULL;
    • unset()删除一个变量后,该变量的值为NULL。

数据类型转换

  • 概念

    • 数据有不同的类型,有时间操作数据时需要转换类型以后才能完成操作,比如计算
    • 类型的转换分为两种:自动转换(隐式转换)、手动转换(强制转换)在js中则被称为显示转换
    • 大部分情况下数据是自动转换,少数情况下强制转换。
  • 强制转换

    • 通过关键字进行转换

      1
      2
      3
      4
      5
      6
      7
      8
      (bool)$a	//强制转换为bool
      //除了0,0.0,”“,”0“,NULL,array(),转为false,其余都为true
      (int)$a //强制转换为int
      //转换会将小数去尾
      (string)$a //强制转换为string
      //null也可以转为‘’;
      (array)$a //强制转换为array
      (object)$a //强制转换为object
  • 进制转换

    • 进制就进位制,X进制,就是逢X进一。同理:十进制就是逢十进一,二进制逢二进一等等。
    • 8进制:有8个基本数,分别为0、1、2、3、4、5、6、7,运算规则”逢8进1”;
    • 16进制:有16个基本数,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,运算规则”逢16进1”。
    • 2进制:有2个基本数,分别是0、1,运算规则”逢2进1”。
    • 转换方法:
      • decbin()将十进制转换为2进制
      • bindec()将2进制转换为十进制
      • decoct()将十进制转换为8进制
      • octdec()将八进制转换为10进制
      • dechex()将十进制转换为16进制
      • hexdec()将16进制转换为十进制

运算符

  • 算数运算符+、-、*、/、%、++、–

  • 赋值运算符=、+=、-=、*=、/=、%=

  • 字符串运算符. 和 .=

    • 案例:隔行变色

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      <?php
      header('content-type:text/html;charset=utf-8');

      $str = "<table width='500' border='1' align='center'>";
      $str .= "<tr bgColor='#f0f0f'>";
      $str .= " <th>编号</th>";
      $str .= " <th>新闻编号</th>";
      $str .= " <th>发布时间</th>";
      $str .= "</tr>";
      for($i = 0 ; $i < 10 ; $i ++) {
      if($i % 2 == 0) {
      $str .= "<tr bgColor='#f0f0f'>";
      } else {
      $str .= "<tr>";
      }
      $str .= "<td>$i</td>";
      $str .= "<td>&nbsp;</td>";
      $str .= "<td>&nbsp;</td>";
      $str .= "</tr>";
      }
      $str .= "</table>";
      echo $str;
      ?>
  • 比较运算符>、<、>=、<=、\=\=、!=、\=\=\=、!==

    • 案例:字符串比较

    • ASCII码表:如果两个字符进行比较,比较的本质是它们对应的ASCII码

      1
      echo ("a" > 120);
  • 逻辑运算符&&、||、!

    • 实例:闰年判断

      1
      2
      3
      4
      5
      6
      7
      8
      9
      //条件:
      //1)能够被4整除,且不能被100整除
      //2)能被400整除
      $year = 2000;
      if ($year%4 == 0 && $year % 100 !=0 || $year % 400 ==0) {
      echo "{$year}是闰年";
      } else {
      echo "{$year}不是闰年";
      }
  • 运算符优先级

  • 三元运算符

    • 案例:比较两个数的大小

      1
      2
      3
      $a = 123;
      $b = 456;
      $max = $a > $b ? $a : $b;
  • 错误控制运算符(@)

    • 作用:主要用来屏蔽表达式的错误:

    • 可以用在变量、常量、函数调用之前,但是不能用在函数定义、类定义之前。

      1
      2
      3
      $a = 100;
      $b = 0;
      echo @($a / $b);

流程控制

  • 顺序结构

    • 赋值语句

      1
      $a = 123;
  • 分支结构

    • 分支结构(if)
    • 多条件判断(if else if else)
      • 案例:根据分数给评语。
    • 多分支结构(switch)
      • 案例:完成今天星期几
  • 循环结构

    • while
    • do while
    • for
    • break和continue
    • 案例:
      • 1)得到1~100的所有整数相加之和
      • 2)输出100~1000以内所有水仙花数
      • 3)输出九九乘法表

数组

概念

  • 数组是一组数的集合。如:$arr = array(1,2,3,4,5,6);

PHP中数组的分类

  • 枚举数组
    • 数组元素的下标(索引),是从0开始的正整数,如:$arr = array(1,2,3,4,5,6);
  • 关联数组:
    • 数组元素的下标,是一个字符串。如:$arr[‘edu’] = ‘大专’
    • 关联数组无法通过数字下标取得对应的元素
  • 混合数组:
    • 两种下标都有的数组,就是混合数组。如:$arr = array(100, ‘edu’=>’大专’ , ‘tel’ => ‘130110’)
  • 多维数组:
    • 数组元素的值,是一个数组,还可以理解为:数组嵌套数组。如:$arr[5][2] = 100

数组的创建

  • 使用 array() 函数来创建数组

    • 创建枚举数组:

      • 下标是从0 开始的正整数

      • 1
        $arr = array($value1,$value2,$value3,....);
  • 创建关联数组

    • $key是重新给数组元素指定一个下标

    • 下标和元素的值之间连接号是”=>”,又称”重载元素下标”

      1
      $arr = array([$key=>]$value,[$key=>]$value,[$key=>]$value,....)
  • 创建混合数组

    • 有字符串下标的元素,就没有整型下标

    • 如果$key省略了,就用默认下标

    • 下标只能是整型以及字符串

    • 如果元素没有指定下标,会在最大整数下标的基础上加1.

      1
      $arr[] = $value
      • 如果$arr数组不存在的话,会先创建数组,并添加第1个数组元素,第1个元素的下标为0
      • 如果$arr已经存在 的话,添加新的数组元素,新的数组元素的下标,是最大整数下标+1
    • 创建混合数组:

      • 由语法1,2混合创建数组

        1
        2
        3
        4
        5
        6
        $arr[] = 12;
        $arr[] = 13;
        $arr["a"] =14;
        $arr[] = 15;
        $arr[20] = 16;
        $arr[] = 19;

多维数组

  • 多维数组,即数组中的元素又是一个数组

    1
    2
    3
    4
    5
    6
    $arr = array(
    array(1,2,3,4),
    array(10,20,30,40),
    array('a','b','c'),
    "abc"
    );

数组中的函数

  • count()
    • 计算数组中的单元数目或对象中的属性个数
    • 语法:int count ( mixed $var [,\$mode = COUNT_NORMAL ] )
    • 参数:
      • $var 是对象或者数组
      • $model: 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。mode 的默认值是 0。count()识别不了无限递归
  • unset()
    • 删除变量或数组元素
    • 语法:void unset ( mixed $var [, mixed $… ] )
    • 删除元素后,仅仅只是相当于将数据从数组中移除掉了,对数组的下标没有影响

数组的遍历

  • 使用for加next()遍历数组 此方法比较麻烦
1
2
3
4
for($i = 0; $i < count($arr); $i++) {
echo key($arr).current($arr)."<br/>"
next($arr);
}
  • key():当前指针处元素的键名(下标),不会移动指针
  • current():返回当前指针处元素的值,不会移动指针
  • next(): 返回下一个元素的值,指针移动到下一个元素的开头

PHP中的数组传值时为值传递

1
2
3
4
$arr = array(1,2,3,4);
$arr1 = $arr;
$arr1[0] = 100;
echo $arr[0];//1

函数

概念

  • 函数是一段命名的代码段
  • 封装一代码,将来要执行时可以直接调用

定义函数的方式

1
2
3
4
5
6
7
8
9
10
11
/*
function 定义函数的关键字
functionName 函数的名称
arguments 形参列表
retValue 返回值
fnCode 功能代码
*/
function functionName(arguments){
// fnCode
return retValue;
}
  • function: 定义函数的关键字,不区分大小写
  • functionName:函数名称,命名规则与变量一样,只是不需要加$符号
  • 小括号():主要用来接受传递过来的参数
  • arguments:定义函数时的参数,形参
  • return 函数的返回值。

函数的调用:

  • 实参:调用函数时,传递的参数就是实参,含有真正数据的
  • 形参:定义函数时的参数
  • 案例:得到数组中所有数组的和

函数参数的传递:

  • 值传递
    • 函数参数的值传递,就是将参数的值,复制一份,传到函数中
    • 值传递速度比较慢,但修改其中一个不会影响到另一个;
  • 引用传递
    • 引用传递速度比较快,但修改其中一个,另一个也会改变。
    • 引用传递,是将一个变量的地址,复制一份,传到函数中
  • 默认参数
    • 函数中有些参数可能是固定不变的,为了操作方便,可以用默认参数来代替
    • 默认参数必须放在非默认参数的右边
    • 默认参数的值,只能是:字符串、整型、浮点型、布尔型、NULL、数组
1
2
3
function showSelf($name,$age=19,$gender="男") {
echo "我叫{$name},今天{$age},性别{$ender}";
}

函数可变数量参数

  • func_get_args( void ):返回一个参数列表的枚举数组,参数数组的下标是从0开始的整数

  • func_get_arg( $index ):返回参数数组中,指定下标的参数的值;

  • func_num_args( void ):返回实参的个数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function getSum() {
    $arr = func_get_args();
    $len = func_num_args();
    $sum = 0;
    print_r($arr);
    echo "<br/>";
    print_r($len);
    echo "<br/>";
    for($i = 0; $i < $len; $i++) {
    $sum += func_get_arg($i);
    }
    echo "$sum";
    }
    getSum(1,2,3,4,5);

函数的返回值

  • 函数的返回值,通过return语句来实现;
  • 将函数的执行结果,返给了函数调用者;
  • return语句一旦执行,函数立即结束,函数剩余的代码不再执行了。
  • return语句有”中断”函数、”退出”函数;
  • return不能同时返回多个值,只能返回一个值。如果想返回多个值,可以放入数组

常用系统函数

字符串

  • 定义字符串基本语法
    • 单引号字符串
    • 双引号字符串
    • nowdoc字符串
    • heredoc字符串
  • 字符串常用api
    • strlen() 获取字符串长度
    • substr() 返回字符串的子串
    • strtoupper() 将字符串转化为大写
    • strtolower() 将字符串转化为小写
    • ucfirst() 将字符串的首字母转换为大写
    • trim() 去除字符串首尾处的空白字符
    • ltrim() 删除字符串开头的空白字符
    • rtrim() 删除字符串末端的空白字符
    • strrev() 反转字符串
    • strpos() 查找字符串首次出现的位置,从左往右查找
    • strrpos() 计算指定字符串在目标字符串中最后一次出现的位置,从右往左查找
    • strchr()和strstr() 两者一样,用于查找字符串的首次出现
    • str_replace() 子字符串替换
    • str_repeat() 重复一个字符串

数学

  • 常用函数
    • max() 求最大值
    • min() 求最小值
    • rand() 产生一个随机整数
    • mt_rand() 更高效的随机数
    • ceil() 进一法取整
    • floor() 舍去法取整
    • round() 对浮点数进行四舍五入
    • pow() 次方运算
    • abs() 求绝对值
    • sqrt() 开方运算

日期

  • 常用函数
    • time() 返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数
    • date() 格式化一个本地时间/日期
    • microtime() 返回当前 Unix 时间戳和微秒数
    • strtotime() 将任何英文文本的日期时间描述解析为 Unix 时间戳
-------------本文结束感谢您的阅读-------------
MrGo wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!