PHP基础

本文详细介绍了PHP的基础知识,包括PHP的运行环境、基础语法、变量、运算符、控制语句、数据类型、数组操作、数据存储、HTTP请求方法、数据库交互及文件上传。通过实例演示了PHP的语法用法,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.PHP基础语法概述

1.运行PHP文件
   PHP文件的运行,必须放在服务器中,并在浏览器中使用url访问PHP文件,PHP会在服务器执行代码,并将执行结果压平为一个HTML文件返回浏览器,让浏览器展示
   所有的PHP文件只能在服务器中运行,我们通过本地服务器localhost或者127.0.0.1进行访问
2.PHP的壳子
   PHP文件中写HTML语法,PHP语法嵌套在HTML语法当中,使用壳子:<?php ?>里边写PHP语法
   js在HTML中使用:<script></script>
   css在HTML中使用:<style></style>
   注意:只要存在PHP语法的文件,后缀一定是.PHP,并且一定在服务器中运行访问
3.echo 输出
   echo英文是回声的意思:
   这是一个关键词,不是函数,所以不能加括号
   echo(123);错误的用法
   echo 123; 正确的用法
   注意 :PHP中语法规定每一条语句后边都必须加分号,不写分号要报错,PHP的字符串与js一样使用单/双引号引起来
   PHP中字符串拼接使用".",js中使用+
4.php中的变量
   变量不需要定义
   命名规范:必须以$开头,其他的与js一样,$之后跟数字、字母、下划线,但是不能以数字开头:
      $abc12_2,$_aaa合法
      $122asd不合法
   大小写敏感:$a与$A是不一样变量
   字符串中拼接变量的方法:
    1)使用"."拼接
    2)直接将变量写进字符串,字符串必须使用双引号
    3)在字符串中将变量使用{}包裹起来,但是字符串必须使用双引号
5.PHP的运算符
   算数运算符:+-*/%
   赋值运算符:= += -= *= /= %=
   比较运算符:> < >= <= == === != !==
   逻辑运算符:&& || !
      短路语法:
         c = a && b 如果a为真,那么c=b,不管b是真还是假;如果a为假,那么c=a,b不会执行,返回第一个为假的表达式 

         c = a || b 如果a为真那么c=a,不执行b,如果a为假,那么c=b,不管b是真是假,返回第一个为真的表达式
   三元运算符: ? :
   用法基本与js一样一样的
6.控制语句:
   for循环,if判断,switch语句,while语句,do while语句,都和js一样
小作业:使用PHp的循环语法找出1-100的质数,输出到页面中
         质数:也叫素数,约数只有1和自身,质数只能被1和自身整除,eg:2,3,5,7,11,13,17,19
         整理笔记,重敲案例
7.单双引号的区别:
   双引号可以包裹变量,
   单引号不可以包裹变量,单引号包裹变量直接将变量输出  

二.PHP的基本数据类型

 

js中有五种基本数据类型:
      Number,String,Boolean,Null,Undefined
   对象类型:
      Object,Array,Function
   PHP中有八种原始数据类型:四种标量类型,两种复合类型,两种特殊类型
   PHP是一种弱引用的脚本语言,不需要声明变量的数据类型,变量的数据类型根据赋值的类型进行确定
      1.四种标量
         整型:integer
         浮点型:float   浮点数:double
         布尔型:boolean
         字符串:string
         使用gettype()方法可以检测数据类型
         注意:浮点型会输出double,而不是float
      2.PHP中打印输出总结
         echo $a;     只能打印四种标量
         var_dump();  在PHP调试过程中比较常用,用于输出变量内容的长度,类型,以及内容
         print_r();   可以打印任何数据类型,但是只能打印内容,不能展示数据类型长度,如果是标量就与echo一样,如果是数组或者对象则会按照一定的规则进行打印
         die();       死亡打印,一旦打印就会终止后边的程序执行,广泛运用于代码调试过程
      3.标量检测
         整型:is_int();is_integer()    检测是不是整型,是返回真,不是返回假
         浮点:is_float();is_double();is_real()  检测是不是浮点型,是返回真,不是返回假
         布尔:is_bool();     检测是不是布尔类型,是返回真,不是返回假
         字符串:is_string();     检测是不是字符串,是返回真,不是返回假
      4.两种复合类型:
         数组(Array)和对象(Object)
         数组有四种声明方式
         对象:
            对象使用类进行声明
            语法:
               class Object{
                  public $name='lisi';
                  public function fun(){
                     echo 'hello';
                  }
               }
               $o=new Object;
               var_dump($o);
               var_dump($o->name);
               var_dump($o->fun());
      5.两种特殊类型:
         1) 资源类型(resource)
            打开文件,读取内容,写入内容
            //打开的是一个数据流
            $g=fopen('text.txt','r');
            //读取文件内容
            $con=fread($g,filesize('text.txt'));
         2)NULL
            $k=null;
            变量没有赋值为空,变量赋值为null时为空,变量被释放时为空  unset()
      6.变量操作
         1) 判断变量是否被设置,返回Boolean
            isset();
         2) 释放变量,将变量所在内存清空
            unset();
         3) 判断变量是否为空,如果为空返回为真,不为空返回假
            emoty();
      7.变量赋值
         传值赋值:
            $str='hello';
            $s=$str;
         传址赋值:&用于获取变量地址
            $a=1;
            $b=2;
            $a=&$b;
            echo $a;
            $a=3;
            echo $b;

8.变量类型的转换 隐式转换: 1.'3'='13'; 1+'3'=4; 整型 1+1.1=2.1 浮点型 强制转换: (int) 强制转为整型 (bool) 强制转为布尔 (string) 强制转为字符串 (float) 强制转为浮点 (array) 强制转为数组 (object) 强制转为对象

三.PHP基础语法:

   1.函数
      PHP中的函数与js基本一样
      但是PHP中没有所谓的构造函数,不能用new,PHP中实例化对象要使用类(class)
      注意:函数内部不能使用函数外部的全局变量,如需使用传参数
   2.数组
      PHP中的数组与js中的数组差距有点大
      PHP中定义数组的方式:
         1) $arr=array(1,2,3);
         2) $arr=[1,2,3];
         3) $arr=array('name'=>'lisi','age'=>'23');
         4) $arr[1]='hello';
      PHP中有两种数组:
         索引数组,关联数组
         以数字为索引的数组叫做索引数组
         以字符串为索引的数组叫做关联数组
      PHP数组遍历:
         for as
         语法:
         foreach($arr as $k=>$v){
            $k 是键
            $v 是对应的值.
         }
      array_sum():计算数组的总值
      array_pop():删除数组最后一个值
      array_push():在数组尾部添加一个值
      array_shift():删除数组第一个值
      array_unshift():在数组头部添加一个值
      in_array($v,$arr):判断$v是否存在于$arr数组中
      is_array($arr):判断$arr是不是数组
      count($arr):获取数组的长度
      array_merge($arr1.$arr2,...):合并一个或多个数组
      注意:使用一个标准的关联数组能够变为一个标准的json字符串    json_encode()
      $arr=array('name'=>'lisi','age'=>23);
      json_encode($arr);
      '{"name":"lisi","age":"23"}'
   3.PHP乱码解决
      如果PHP中出现了乱码,那么在PHP中开头的位置加上:header('content-type:text/html;charset=utf-8');统一编码方式(解析代码编码与文件保存编码一致)
   4.纯PHP文件书写规范
      如果是PHP和HTML文件混合开发,那么PHP的壳子必须完整:<?php  ... ?>
      如果PHP文件中只有PHP语法,只需要写:<?php  后边的一般不需要写(推荐)
   5.输出PHP版本信息
      echo phpinfo();
   6.PHP注释
      // 单行注释
      /* */ 多行注释
      # 脚本注释
      /** */ 文档注释
   7.PHP与HTML,js,css混编
      混编一定要注意文件是.php文件

 

四.数据存储


   1.文件存储:
      写入:
         $fp=fopen('message/msg.txt','a+');
         fwrite($fp,"name:".$name.",message:".$msg.'|');
         fclose($fp);
      读取:
         $content=fread($fp,filesize('message/msg.txt'));
         fclose($fp);

         $contents=file_get_contents('message/msg.txt');
         $contents=str_replace("|","\",$contents);

         r  打开文件为只读。
         w  打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。
         a  打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。
         x  创建新文件为只写。返回 FALSE 和错误,如果文件已存在。
         r+ 打开文件为读/写、文件指针在文件开头开始。
         w+ 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。
         a+ 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。
         x+ 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。

 

五.get与post请求

  1.js做一个假的登录检测
   2.HTML页面从服务器到浏览器解析的过程
      1) 浏览器进行http请求
      2) 服务器执行PHP语句
      3) 服务器发出http响应(就是将页面返回给浏览器)
      4) 浏览器进行html,css,js解析渲染
      问题:如果使用PHP进行账号密码验证,那么在浏览中输入的内容如何进入到服务器中去的?
      两种方法可以将浏览器参数传到服务器:
         1) 使用请求链接后半部分发送get请求       http://www.baidu.com?name=lisi&age=23&sex=man
         2) 使用请求头传递参数 post请求
   3.get请求
      get请求会将参数拼接到请求地址的后边,
         eg:http://www.baidu.com?username=lisi&psw=123
         注意:这种方式不安全,大小有限制,容易被盗
         后台的PHP如何接受参数?
            PHP通过超全局变量:$_GET后取前端通过get请求发送的数据参数
         $_GET:是一个超全局变量,可以用于接受get请求发送的参数,收到的是一个PHP数组,里边存放的用户发送的所有参数
   4.post请求
      post请求并不多见,但是比较安全,post请求必须使用表单才能发出,所以ajax发送的post请求都是模拟表单发出的
      PHP如何接收post请求数据参数?
         $_POST 超全局变量    用于接收前端post请求发送的数据参数,是一个数组
   5.form表单
      action:表单内容发送的位置,通常提交到PHP文件中。我们叫这些文件为接口文件
      method:表单的提交方式,通常是get/post
      enctype:上传内容编码方式
         默认值:x-www-form-urlencoded
         上传文件编码:multipart/form-data
      PHP可以通过超全局变量 $-FILES接收前端发送的文件

 

六.数据库存储

 数据库(Data Base) = 数据存储(table) + 数据操作的API
    API:应用程序接口(application interface)
    数据库操作API就是对数据库数据进行操作的接口(方法)
    常见有名的数据库:
        MySQL:是一个免费的开元的数据库,后来被Oracle(甲骨文)收购
        Oracle:甲骨文,收费的数据库
        Sql Server:微软的数据库
    我们学习MySQL数据库,安装了xampp就可以集成Apache和MySQL的服务
    数据库的可视化工具:sqlyog或者使用xampp中集成的phpmyadmain
    1.数据里链接
        使用PHP可以连接当前服务器下的数据库,用于读取数据库中的内容以及对数据库进行操作
    2.连接数据库的语法
        PHP的支持:
            MySQL支持的语法:
                1)连接数据库
                    参数1:数据库地址
                    参数2:用户名
                    参数3:密码
                    $conn = mysqli_connect('localhost','root','');
                2)选择连接的库
                    mysql_select_db('1709B');
                3)中文编码
                    mysql_query("SET NAMES UTF8");
                4)书写sql语句
                    $sql = "SELECT * FROM diaocha";
                5)执行sql语句
                    $result = mysql_query($sql);
                6)关闭数据库
                    mysql_close($conn);
            MySQLi支持的语法:
                1)连接数据库
                    $conn = mysqli_connect('localhost','root','');
                2)选择连接的库
                    mysqli_select_db($conn,'1709B');
                3)中文编码
                    mysqli_query($conn,"SET NAMES UTF8");
                4)书写sql语句
                    $sql = "SELECT * FROM diaocha";
                5)执行sql语句
                    $result = mysqli_query($conn,$sql);
                6)关闭数据库
                    mysqli_close($conn);
            MySQLi读取
                1)连接数据库
                    $conn = mysqli_connect('localhost','root','');
                2)选择连接的库
                    mysqli_select_db($conn,'1709B');
                3)中文编码
                    mysqli_query($conn,"SET NAMES UTF8");
                4)书写sql语句
                    $sql = "SELECT * FROM diaocha";
                5)执行sql语句
                    $result = mysqli_query($conn,$sql);
                6)解析数据
                    while($row=mysqli_fetch_array($result)){
                        mysql_fetch_array这个方法可以将数据集中的内容读取,while循环一次就会读取一个,每读取一个,$result中就会少一个,直到$result变成空的
                    }
                7)关闭数据库
                    mysqli_close($conn);
    3.phpMyAdmain中新建数据库
        数据库名称+编码方式utf8_unicode_ci
        新建数据库表 + 字段数量
        设置字段 + 字段类型(整型,浮点,字符串......) + 字段长度
        一个空的数据库就建好了

 

七.数据库的操作

   数据库增删改查
    1.数据库插入数据
        1) 插入所有信息
            INSERT INTO student VALUES(1,'程思琪',19,'女','1657924514','北京市房山区窦店镇中国信息大学','15001290514','我是谁,哈哈哈')
            插入一整条数据,包含了所有的值
        2) 部分值插入
            INSERT INTO student (id,name,description) VALUES (5,'小二','我是小二');
            插入提到的部分值,其他值为空
    2.删除数据
        DELETE FROM student WHERE id = 1
        删除id=1的这条数据
    3.更新数据(改)
        1) 修改一个字段
            UPDATE student set age = 20 WHERE id=5;
            将student表中的id为5的这条数据中的age改为20
            修改部分值
            UPDATE student set sex='女',qq='1235698741',address='山西' WHERE id=3;
        2) 条件更新数据
            UPDATE student set description='哈哈哈' WHERE age>0 and age<15;
    4.查询数据

1. select * from table
        通过*查询所有字段但是不能规定字段的顺序,数据量特别大时查询效率太低,所以建议书写详细的条件查询
2.where
    添加条件,删除、查询、更新
    eg:
        select * from student where age>30;查询年龄大于30岁的所有人
3.and
    逻辑与关系,在where条件后边添加与逻辑
    eg:
        select * from student where age>30 ang age<35;查询年龄在30-35之间的人
4.or
    逻辑或
    eg:
        select * from student where age>30 or age<20;查询年龄大于30或小于20的人
5.distinct
    过滤重复记录,返回唯一结果
    eg:
        select distinct name from student;过滤重复的名字返回唯一的名字
        注意:获取的只有name,其他属性不存在,会将重复的名字变成一个
6.is null
    判断字段是否不为空
    eg:
        select * from student where phone is null;
        注意:该字段设置属性默认值为空时,如果该字段不设置内容,就是null,否则即使不设置内容,系统也不会认为是null
7.is not null
    判断字段是否为空
    eg:
        select * from student where phone is not null;
8.if(表达式,v1,v2)
    当表达式为真返回v1,为假返回v2;
    eg:
        select name,age,if(age>20,'大','小') from student;
        会有一个新的字段:if(age>20,'大','小'):"大/小"
9.order by
    对查询内容进行排序
10.desc
    对查询内容进行降序排列
        eg:
            select * from student order by age desc;查找表中所有内容根据年龄进行降序排列
11.asc
    对查询内容进行升序排列
        eg:
            select * from student order by age asc;查找表中所有内容根据年龄进行升序排列
12.rand()
    随机取值
        eg:
            select * from student order by rand() limit 4;查询所有数据随机取出4条
13.limit n
    限制取值n条
        eg:
            select * from student order by age desc limit 4;按照降序取出前4条数据
14.limit m,n
    取出从m开始的n条数据,m是从0开始
         eg:
            select * from student order by age desc limit 0,3;按照降序从0开始取取出3条数据,用于做分页是非常方便的
15.between v1 and v2
    在v1与v2之间进行检索内容
        eg:
            select * from student where age between 22 and 60;在年龄介于22--60之间查找数据
16.not between v1 and v2
    检索不在v1--v2之间的内容
        eg:
            select * from student where age not between 22 and 60;在年龄22--60之外查找数据
17.in(v1,v2,v3......)
    检索索引值是否与小括号中的值相等
        eg:
            select * from student where age in(10,20,33);查询所有数据找出年龄为10,20,33的人
            age=10 or age=20 or age=33
18.not in(v1,v2,v3......)
    检索索引值不等于小括号内的值
        eg:
            select * from student where age not in(10,20,33);查询所有数据找出年龄为10,20,33的人
            age!=10 and age!=20 and age!=33
19.like
    匹配字符串
    eg:
        select * from student where name like "李%";以李开头的名字被选中
    eg:
        select * from student where name like "%李%";包含李的名字被选中
    eg:
        select * from student where name like "%李";以李结尾的名字被选中
20.not like
    like相反的意义
21.count(*)
    eg:
        select count(*) from student; 统计一共获取多少条数据
22.max()
    eg:
        select max(age) form student;获取表中年龄最大的人的年龄值
23.min()
    eg:
        select min(age) form student;获取表中年龄最小的人的年龄值
24.sum()
    eg:
        select sum(age) form student;获取表中所有人的年龄和
25.avg()
    eg:
        select avg(age) from student;获取表中所有人的平均年龄

八.文件上传

    1. 文件的接收,超全局变量$_FILES
        $_FILES 是一个数组
        1) $_FILES['fileName']['name']
            客户端上传文件原名
        2) $_FILES['fileName'][type]
            文件的MIME类型,需要浏览器提供该信息的支持,
                eg:image/gif,text/html
        3) $_FILES['fileName']['size]  
            文件大小,单位是字节(B)
        4) $_FILES['fileName][tmp_name]
            文件被上传后,在服务器中临时存储的位置,一般是系统默认的位置,当然可以在php.ini这个PHP配置文件中,upload_tmp_dir这个属性进行设置临时存储的位置
        5) $_FILES['fileName]['error']
            0: 没有错误,上传成功UPLOAD_ERR_OK
            1: 上传文件超过PHP.ini中upload_max_filesize设置的大小限制UPLOAD_ERR_INI_SIZE
            2: 上传的文件超过form表单中的MAX_FILE_SIZE指定的大小限制UPLOAD_ERR_FORM_SIZE
            3: 文件上传的一部分 UPLOAD_ERR_PARTIAL
            4: 没有文件被上传 UPLOAD_ERR_NO_FILE
            5: 上传文件大小为0
    2. form发送文件
        form表单使用input type='file' 文件域进行文件上传,但是form表单必须设置enctype='multipart/form-data' 用来设置表单的MIME编码,可用于上传文件,form表单默认编码是:enctype='application/x-www-form-urlencoded'

九.PHP获取时间

设置时区: data_default_timezone_set('PRC');
获取时区: data_default_timezone_get();
PRC: Prople’s Republic of China 中华人民共和国
Asia/chongqing,Asia/shanghai,
1) 获取当前的时间戳
    时间戳:1970年1月1日0:0:0到当前时间的总秒数
    time()  获取服务器时间戳 ,秒
2) 时间函数 
    date()   获取当前日期
    语法:
        date('y-m-d h:i:s')  获取固定格式的当前时间
        date('y-m-d h:i:s','1726876789')  按照固定格式获取某个时间戳代表的时间
    时间参数:
        a : am || pm
        A : AM || PM
        d : 几日,2位数字,不足两位补0,eg:01-31
        D : 星期几,三个字母,eg:Fri
        F : 月份,英文全名,eg:January
        h : 12小时制的小时,01-12
        H : 24时小时,00-23
        g : 12小时制的小时,不足两位不补0,1-12
        G : 24时小时,不足两位不补0,0-23
        i : 分钟,00-59
        j : 几日,2位数字。不足两位不补0,0-31
        l : 星期几,英文全称,eg:Friday
        m : 月份,2位,不足2位补0,01-12
        M : 月份,三个英文字母,Jan,May
        n : 月份,2位,不足两位不补0,1-12
        s : 秒,00-59
        S : 字尾加英文序数,2位英文字母,th,nd
        t : 月份的天数,28,30,31
        U : 总秒数
        w : 数值型的星期几,eg:0-6(星期日-星期六)
        Y : 年,四位,2018
        y : 年,两位,18
        z : 今天是一年中的第几天,0-365
3) strtotime()
    strtotimr('2018-6-1 12:12:12')   将这个时间转为时间戳
4) microtime()
    microtime()  获取微秒数和时间戳
    microtime(true)  获取微秒数的浮点类型
    1s=1000ms   1ms=1000μm   1s=1000000μm
5) getdate()  获取时间数组

十.session

1.cookie
    后台设置cookie:
        setCookie(name,value,expire,path)
        参数1:cookie名称
        参数2:cookie内容
        参数3:过期时间
        参数4:cookie在服务器的有效地址
    后台读取cookie:
        $_COOKIE超全局变量
    前端获取cookie:
        document.cookie
    cookie是前端浏览器的一个存储机制
2.session
    session是后台服务器的存储机制
    session会话原理:
        每一个服务器访问者都有一个唯一的id(UID),并且基于这个UID来存储变量,UID存储在cookie中,或者可以通过url进行传输
3.session用法:
    1) 开启会话:
        session_start();
    2) 设置和读取session
        设置:$_SESSION['name'='lisi'];
        读取:$name=$_SESSION['name'];
    3) 获取sessionID
        session_id();
    4) 释放单个session
        unset($_SESSION['age'])
    5) 释放多个session
        $_SESSION=array();
    6) 彻底释放当前session
        session_unset();
        释放session的标准方法,释放完还可以继续添加内容
    7) 彻底销毁session
        先销毁内容:session_unset();
        再去销毁session以及sessionID:session_destory();
        如果向再次在session中存取内容,需要重新开启session,session_start();
4.session与cookie的区别与应用
    1) session是存放在服务器的但是cookie是存放在浏览器,
    2) cookie不安全,别人可以分析存在本地发cookie而读取你的隐私,考虑安全方面,我们选择session
    3) session会在一定时间内保存在服务器,当访问两增多时,会占用大量的服务器内容,影响服务器性能,考虑减轻服务器负担,我们选择cookie
    4) cookie存储量不超过4K,很多浏览器限制保存20个COOKIE,考虑个数,我们选择session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值