美文网首页
前端-10-PHP基础

前端-10-PHP基础

作者: 西海岸虎皮猫大人 | 来源:发表于2020-09-09 08:04 被阅读0次

1.概述

最早用于维护个人主页
php大小写敏感
php变量只有全局和局部

2.环境搭建

安装apache

下载地址:
https://www.apachehaus.com/cgi-bin/download.plx?dli=WNjRXF1UNVjT6p0KWdUMrBlVOpkVFVFdWBDdrJ2d
解压 -> 修改conf\httpd.conf

# 修改为解压路径
Define SRVROOT "C:\sof\Apache24"
# 安装服务
"C:\sof\Apache24\bin\httpd.exe" -k install -n apache
# 如果错误提示:
# (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: make_sock: could not bind to address [::]:443
# 则为443端口被占用
# 修改配置文件 conf\extra\httpd-ahssl.conf 和 conf\extra\httpd-ssl.conf 中的443为442
# 重新安装服务
# 启动服务,双击 bin\ApacheMonitor.exe,点start
# 访问 http://localhost测试是否安装成功
安装php
# 下载php并解压,这里使用php-7.3.2-Win32-VC15-x64.zip
# 添加环境变量path
C:\sof\php
C:\sof\php\ext
# 修改apache配置conf\httpd.conf
----------
# 加载php模块
LoadModule php7_module "C:\\sof\\php\\php7apache2_4.dll"
# 添加php格式支持
AddType application/x-httpd-php .php
----------
# ApacheMonitor重启apache服务
# Apache24\htdocs目录添加php测试文件 phpinfo.php
-----
<?php
phpinfo();
?>
-----
# 浏览器访问: http://localhost/phpinfo.php 测试是否安装成功

3.php语法基础

<?php
    // 格式化输出
    echo "<pre>";
    // 1.变量
    /*$var1 = 'frankie';
    echo $var1;*/

    // 2.常量
    /*define('CONST1', '100000');
    // 常量不加$
    echo CONST1;*/

    // 3.表达式
    // 函数表达式
    /*function foo() {
        return 5;
    }
    $ret = foo();
    echo $ret;*/

    // 4.数据类型
    // Boolean Integer Float String Array Object NUll
    // 查看表达式的值和类型,类似js typeof
    //var_dump()
    /*    $bool1 = true;
    $bool2 = false;
    var_dump($bool1);
    var_dump($bool2);

    $bool3 = 0;
    var_dump($bool3);
    // 强制转换为bool值
    var_dump((bool)$bool3);

    $bool4 = '';
    var_dump((bool)$bool4);
    // 负值也是true,只有0是false*/

    // 5.整形
/*    $int1 = 10;
    var_dump($int1);
    // 8进制
    $int2 = 011;
    var_dump($int2);
    // 16进制
    $int3 = 0xff;
    var_dump($int3);
    // 二进制
    $int4 = 0b1000;
    var_dump($int4);*/

    // 6.浮点型
/*    $a = 3.14;
    // 科学计数法
    $b = 1.2e3;
    // 幂
    $c = 7E-10;*/
    // 比较浮点数没有意义

    // 7.字符串类型
    // 字符串转义
//    $str1 = 'frank say:\'吃了吗?\'';
//    var_dump($str1);
    // 字符串双引号中的内容可以对变量进行解析
//    $str2 = "$str1";
//    var_dump($str2);
    // 字符串拼接使用.运算符
/*    $str3 = 'hello'.'world';
    var_dump($str3);
    // 累加拼接
    $str4 = 'hello ';
    $str4 .= $str3;
    var_dump($str4);*/

    // 8.数组
//    $arr1 = [1, 2, 3, 4, 5];
//    var_dump($arr1);
//    $arr1 = array('username'=>'frank', 'pwd'=>'123456');
//    $arr2 = ['小明', '小红', 18, true];
    // 数组不能用echo直接输出
//    print_r($arr1);
//    var_dump($arr2);
    // 获取数组元素
//    echo $arr1['username'];
//    echo $arr2[1];
    // 获取数组长度
//    echo count($arr1);
    // 数组添加原本不存在的key,不会补差
//    $arr3 = [0 ,1, 2];
//    $arr3[100] = 100;
//    echo count($arr3);

    // 9.对象
/*    class Peo {
        public $name = 'zhangsan';
        function eat() {
            echo '我会吃饭';
        }
    }
    $obj = new Peo;
    // 对象访问属性或方法使用->,.表示拼接
    $obj->eat();
    print_r($obj->name);*/

    // 10.空值
    // NULL不区分大小写
/*    $temp = null;
    var_dump($temp);*/

    // 11. 运算符
/*    $num1 = 100;
    $num2 = 10;
    // 累加
    $num1+=$num2;
    echo $num1;
    // 表达式不能用echo输出
    var_dump(true && false);*/

    // 12.流程控制
/*    $num = 80;
    if($num > 60) {
        echo '及格';
    } else {
        echo '不及格';
    }*/

    // 遍历
//    $arr = ['aa', 'bb', 'cc', 'dd'];
/*    for($i=0; $i < count($arr); $i++) {
        echo($arr[$i]);
    }*/
    // foreach
/*    foreach($arr as $a) {
        echo $a;
    }*/
/*    foreach($arr as $k => $v) {
        echo $k.':'.$v.' ';
    }*/

    // 12.inclue require 导入
    // require如果没有文件会报错,一般用include
//    include 'vars.php';
//    echo $fruit;

    // 13.函数
    // 函数内部不能直接使用全局变量,需要使用global声明
/*    $num = 100;
    function fun() {
        // 声明全局变量
        global $num;
        echo $num;
        $num++;
    }
    fun();
    echo $num;*/
?>

4.继承

<?php
    echo '<pre>';
    // 类声明
    class Peo {
        public $name = 'zhangsan';
        private $pwd = '123';
        public function show() {
            echo 'hello';
        }
        // 公有方法访问私有属性
        protected function getPwd() {
            echo $this->pwd;
        }
    }

    // 类常量 静态变量
    // 两者可以直接通过类调用
    // 继承
    class Stu extends Peo{
        // 类常量不可改变
        const num = 100;
        // 静态变量在类声明时执行一次
        static $count = 200;

        public function showFatherPwd() {
            $this->getPwd();
        }
    }

    // 对象创建
//    $frank = new Peo;
//    print_r($frank);
//    $frank->show();
//    echo $frank->name;
//    $frank->getPwd();

    // 类常量调用
//    echo Stu::num;
    // 静态变量调用
//    echo Stu::$count;
//    Stu::$count = 2000;
    // 对象实例化时,静态变量不会重新声明
//    $myStu = new Stu;
//    echo Stu::$count;

    // 构造函数
    // 类自带和类名相同的构造函数,默认隐藏
    $stu1 = new Stu;
    // 子类调用父类方法
    $stu1->show();
    // 受保护属性只能在类内部和子类内部使用
    $stu1->showFatherPwd();

5.AJAX

a3_jq_ajax.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jquery ajax请求</title>
</head>
<body>
<span>用户名:</span><input type="text" class="username"><br>
<span>密码:</span><input type="text" class="password"><br>
<button>get无参请求</button>
<button>get带参请求</button>
<button>post请求</button>

<script src="js/jquery-1.12.3.min.js"></script>
<script>
    var $userNameInput = $('.username');
    var $passwordInput = $('.password');
    var $btns = $('button');
    $btns.eq(0).click(function () {
        $.ajax({
            type: 'get',
            url: 'a3_jq_ajax.php',
            dataType: 'json',
            success: function (res) {
                console.log(res);
            }
        });
    });
    // get请求携带参数
    $btns.eq(1).click(function () {
        $.ajax({
            type: 'get',
            // 传递参数
            url: 'a3_jq_ajax.php?username='+$userNameInput.val()+'&password='+$passwordInput.val()+'',
            dataType: 'json',
            success: function (res) {
                console.log(res);
            }
        });
    });

    $btns.eq(2).click(function () {
        $.ajax({
            type: 'post',
            url: 'a3_jq_ajax.php',
            // post数据参数
            data: {
                uname: $userNameInput.val(),
                upass: $passwordInput.val()
            },
            dataType: 'json',
            success: function (res) {
                console.log(res);
            }
        });
    });
</script>
</body>
</html>

a3_jq_ajax.php

<?php
    // $_GET内置对象表示前端get请求数据包
    // echo代表返回前端数据
    // json_encode()将数组对象等复杂值转换为json格式
//    $arr = array('msg'=>'OK', 'info'=>'frank is happy');
    // $_GET把前端数据返回前端
//    $arr = array('msg'=>'OK', 'info'=>$_GET);
    // $_POST前端发来的Post请求数据包
    // post请求 TODO
    $arr = array('msg'=>'OK', 'info'=>$_POST);
    echo json_encode($arr);
?>

6.登录demo

a4_login_demo.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录demo</title>
</head>
<body>
<span>用户名:</span><input type="text" class="username"><br>
<span>密码:</span><input type="text" class="password"><br>
<button>用户登录</button>
<script src="js/jquery-1.12.3.min.js"></script>
<script>
    var $userNameInput = $('.username');
    var $passwordInput = $('.password');
    $('button').click(function () {
        $.ajax({
            type: 'post',
            url: 'a4_login_demo.php',
            dataType: 'json',
            // post数据参数
            data: {
                uname: $userNameInput.val(),
                upass: $passwordInput.val()
            },
            success: function (res) {
                console.log(res);
            }
        });
    });
</script>
</body>
</html>

a4_login_demo.php

<?php
    $username = $_POST['uname'];
    $password = $_POST['upass'];
    $success = array('msg'=>'ok');
    // TODO php debug
    if($username == 'frank' && $password == '123456') {
        // 数组添加属性
        $success['info'] = '0';
    } else {
        $success['info'] = '1';
    }
    echo json_encode($success);
?>

7.数据库操作

数据查询
<?php
    echo "<pre>";
    // 建立连接
    $con = mysqli_connect('localhost', 'root', 'root', 'php_demo');
//    var_dump($con)
    // 判断是否连接成功
    if($con) {
        // 连接成功后添加辅助设置避免中文乱码
        mysqli_query($con, "set names utf8");
        mysqli_query($con, 'set character_set_client=utf8');
        mysqli_query($con, 'set character_set_results=utf8');
//        $sql = 'select * from userInfoList where 1';
        $sql = "select password from userInfoList where username='zhangsan'";
        $result = $con->query($sql);
//        var_dump($result);
        if($result->num_rows>0) {
            $info = [];
            // fetch_assoc从结果中拿一条
            for($i=0;$row=$result->fetch_assoc();$i++){
                $info[$i] = $row;
            }
            print_r($info);
            // 获取某条数据
//            echo $info[2]['username'];
//            echo $info[2]['password'];
        }
    } else {
        echo '连接失败';
    }
?>
插入修改删除
<?php
/**
 * 插入\修改\删除
 */
    echo "<pre>";
    $con = mysqli_connect('localhost', 'root', 'root', 'php_demo');
    if($con) {
        mysqli_query($con, "set names utf8");
        mysqli_query($con, 'set character_set_client=utf8');
        mysqli_query($con, 'set character_set_results=utf8');
        // 字段名可以省略
        // 插入
//        $sql = "insert into userInfoList (username, password) values ('wangwu', '123')";
        // 修改
//        $sql = "update userInfoList set password = '987' where username='zhangsan'";
        // 删除
        $sql = "delete from userInfoList where username='zhangsan'";
        $result = $con->query($sql);
        var_dump($result);
    } else {
        echo '连接失败';
    }
?>

8.后台用户名密码校验

<?php
/**
 * 前后台交互
 * User: Vincent
 */
    // TODO
    $username = $_POST['uname'];
    $password = $_POST['upass'];
    $success = array('msg'=>'OK');
    $con = mysqli_connect('localhost', 'root', 'root', 'php_demo');
    if($con) {
        mysqli_query($con, "set names utf8");
        mysqli_query($con, 'set character_set_client=utf8');
        mysqli_query($con, 'set character_set_results=utf8');
        $sql = "select * from userInfoList where 1";
        $result = $con->query($sql);

        $flag = 0;
        if($result->num_rows>0) {
            $info = [];
            for($i=0;$row=$result->fetch_assoc();$i++) {
                $info[$i] = $row;
            }
            // 用户名密码校验
            for($j=0;$j<count($info);$j++) {
                if($info[$j]['username'] == $username) {
                    if($info[$j]['password'] == $password) {
                        $success['infoCode'] = 0;
                        $flag = 1;
                        break;
                    }
                }
            }

            if($flag == 0) {
                $success['infoCode'] = 1;
            }
        } else {
            $success['infoCode'] = 1;
        }
    } else {
        echo '连接失败';
    }
    echo json_encode($success);
?>

9.单例模式

<?php
/**
 * 单例模式
 * User: Vincent
 */
    class DBConnectionSingleton {
        // 静态+私有声明单例对象
        private static $con = null;

        public static function getCon() {
            if(!self::$con) {
                self:$con = new self();
                // 属性赋值
            }
            return self::$con;
        }
    }

    $con1 = DBConnectionSingleton::getCon();
    $con2 = DBConnectionSingleton::getCon();
    print_r($con1 == $con2);

10.PDO

PDO是php和数据库的中间层,提供对不同数据库的通用操作

pdo操作数据库

SingletonPDO.php

<?php
class SingletonPDO {
    private static $pdo = null;

    public static function getPDO() {
        if(self::$pdo == null) {
            try {
                self::$pdo = new PDO('mysql:host=localhost;dbname=php_demo', 'root', 'root');

            } catch (PDOException $e) {
                echo '出现错误, 信息为:'.$e->getMessage();
            }
        }
        return self::$pdo;
    }
}

a8_db_pdo.php

<?php
/**
 * PDO方式连接数据库
 * User: Vincent
 */
    // require可能会引入多次, require_once只引入一次
    require_once 'SingletonPDO.php';

    $pdo = SingletonPDO::getPDO();
    $pdo->exec('set names utf8');
    // 增
//    $sql = "insert into userInfoList values ('zhaoliu', '123')";
    // 删
//    $sql = "delete from userInfoList where username='zhaoliu'";
    // 改
//    $sql = "update userInfoList set password = '1213' where username='frank'";
    // 查
    $sql = "select * from userInfoList where 1";

    // 增删改结果处理
/*    if($pdo->exec($sql)) {
        echo 'success';
    } else {
        echo 'error';
    }*/

    // 查询结果处理
    $result = $pdo->exec($sql);
    var_dump($result);
异常处理
<?php
/**
 * 异常处理
 * User: Vincent
 */
    // 第一类异常,直接try...catch捕获
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=php_demo', 'root', 'root');
        // 第二类异常,第二种处理方式,弹出警报,程序执行不中断
//        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        // 第二类异常,第三种处理方式,中断
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch (PDOException $e) {
        echo '出现错误, 信息为:'.$e->getMessage();
    }

    $pdo->exec('set names utf8');
    $sql = "update userInfoList set password='1234' where username='frank'";
    if($pdo->exec($sql)) {
        echo 'success';
    } else {
        // 第二类异常,第一种处理方式,通过errorCode和errorInfo属性实现
        echo 'fail';
        echo $pdo->errorCode();
        echo $pdo->errorInfo();
    }
预处理
<?php
/**
 * 预处理prepare
 * User: Vincent
 */
try {
    $pdo = new PDO('mysql:host=localhost;dbname=php_demo', 'root', 'root');
} catch (PDOException $e) {
    echo '出现错误, 信息为:'.$e->getMessage();
}
$pdo->exec('set names utf8');
// 占位符
//$sql = "insert into userInfoList values (?, ?)";
// 预处理
//$pdoso = $pdo->prepare($sql);
//echo $pdoso->execute(array('tianqi', '123'));

// bindColumn将执行结果的一列数据绑定到指定对象上
$sql = "select * from userInfoList";
$pdoso = $pdo -> prepare($sql);
$pdoso -> execute();
// 结果内容绑定到指定对象
$pdoso -> bindColumn(1, $username);
$pdoso -> bindColumn(2, $password);
while($row = $pdoso -> fetch(PDO::FETCH_COLUMN)) {
    echo $username.'----'.$password;
}
bindValue
<?php
/**
 * bindvalue
 * User: Vincent
 */
require_once 'SingletonPDO.php';

$pdo = SingletonPDO::getPDO();
$pdo->exec('set names utf8');
$sql = "insert into userInfoList values (?, ?)";
$halfPro = $pdo->prepare($sql);
// bindValue提供更加灵活的参数构建方式
$halfPro -> bindValue(1, 'xiaohong');
$halfPro -> bindValue(2, '777');
$halfPro -> execute();
事务处理
<?php
/**
 * 事务处理
 * User: Vincent
 */
require_once 'SingletonPDO.php';

try {
    $pdo = SingletonPDO::getPDO();
    // 设置异常捕获状态为中断
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec('set names utf8');
    // 开启事务
    $pdo -> beginTransaction();
    $sql = "update userInfoList set password=? where username=?";
    $halfPro = $pdo -> prepare($sql);
    $halfPro -> execute(['321', 'frank']);
    echo '=====修改frank=====';
    $halfPro -> execute(['321', 'wuba']);
    // 提交事务
    $pdo -> commit();
} catch (PDOException $e) {
    $pdo -> rollBack();
    echo '事务回滚';
}

相关文章

  • 前端-10-PHP基础

    1.概述 最早用于维护个人主页php大小写敏感php变量只有全局和局部 2.环境搭建 安装apache 下载地址:...

  • 前端基础进阶系列

    前端基础进阶(一):内存空间详细图解前端基础进阶(二):执行上下文详细图解前端基础进阶(三):变量对象详解前端基础...

  • 前端入门系列

    前端HTML & CSS 基础入门(1)初识 前端HTML & CSS 基础入门(2)段落及文本 前端HTML &...

  • 二、flask开发基础与入门

    一、web开发基础 1、前端知识 前端开发基础: HTML CSS JavaScript 前端常用的库与框架: b...

  • 【350页】前端校招面试题及解析大全

    前言 前端校招面试题主要内容包括html,css,前端基础,前端核心,前端进阶,移动端开发,计算机基础,算法与数据...

  • web前端入门基础

    web前端基础笔记 学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言。下面我们就来了...

  • HTML基础学习笔记

    原 Blog 链接:HTML基础学习笔记 自学 html 基础笔记 Web 前端简单介绍 web 前端包含: pc...

  • 学习Vue框架之前,要有JavaScript的知识储备

    前端三剑客知识储备(有关前端的专题) ☑ HTML基础知识 ☑ CSS基础知识 ☑ JavaScript5基础知识...

  • 无标题文章

    #Web前端 - web前端是什么 - 定义 - 职责 - web前端基础知识和学习路线 - web前端学习的...

  • Web前端

    Web前端 web前端是什么- 定义 职责 web前端基础知识和学习路线 web前端学习的资源 1.Web前端是...

网友评论

      本文标题:前端-10-PHP基础

      本文链接:https://www.haomeiwen.com/subject/rzbdektx.html