PHP从入门到跑路(二),基础语法,数据库操作

前言

博主不会php,  是从JAVA转过来的,  PHP教程总结实际开发使用, 更加偏向于实际, 理论比较薄弱, 
一直想总结一个学习教程, 可是没时间. 想快速学习PHP,进行开发的, 请关注博主动态.

一, 变量定义及使用

1, php属于弱类型语言 “10” + 10 = 20 类型会自动进行转换
2, 变量定义与大多数语言一样, 只是变量名需要在开头添加 $
2.1,php的引用全部都是弱引用,不是地址引用,a 引用了 b, 改变a , b不一定会改变

//变量定义名称需要 +$
$a = 10;        //整数
$b = 10.0;      //浮点

$str = "hello php";     //字符串

//字符拼接
$str .= "ni hao";       //结果 hello php ni hao

//嵌入变量
$str1 = "hello {$a}";   //结果 hello 10

3, php也有对象一说

/**
 *  对象, 借鉴Java
 *  php分对象和数组, 数组使用比对象多
 */

/*-----------------------------  类定义 ------------------------------- */

//类定义
class Person{
    public $age = 1;
    public $name = "jack";
    //静态变量
    public static $city = "长沙";

    //函数定义不需要像java一样提供返回格式
    //就像js一样
    public function method1(){
        echo "method1";
    }

    //返回参数的方法
    public function method2(){
        return "hello";
    }

    //可以改变传参的函数, 指针引用需要添加&
    public function method3(&$p){
        //指针改变
        $p -> age = 123;
        // this = 调用对象
        $this -> age = 123;
    }

    //静态函数
    public static function method4(){
        echo "static method";
    }
}

在使用php对象方法和属性时需要使用, 对象 -> 方法或者属性

/** 使用对象属性, 当然也可以像java那样封装起来, 提供getter, setter方法
 *  但是我没见过有人用
 */
$obj = new Person();
$obj -> age;
$obj -> method1();
$obj -> method2();
$obj -> method3($obj);

//静态变量, 函数
$city = Person::$city;
Person::method4();

4,数组定义, php语言中大量使用了数组,个人感觉数组的使用超过对象,且数组拥有丰富的api支持, 数组相当于一个java中的object map, key 和 value 都是object类型, object就是任意类型

/*-----------------------------  数组定义 ------------------------------- */

//数组定义, 这个在PHP中使用频繁, 可以把数组看作java的map, 但比map更方便
//普通定义
$arr1 = array();

//初始化赋值, 可以看到这个和上面的对象一样, 只是没有函数
//如果让我选择存储体, 数组是挺好的选择
$arr2 = array("age"=>1,"name"=>"jack");

//数组添加值
$arr1[] = $arr2;    //这时候的arr1 就变成了一个二维数组

//添加多个值, 参数1 是目标, 参数2,3,4..... 都是值
array_push($arr1,$arr2,$arr2);

//数据可以不一样, 但实际如果只当数组使用, 建议数据结构一致
$arr1[] = array("sex"=>"男","money"=>"123");

//改变了arr2 中的age值
$arr2['age'] = 2;

$json = "{'age':1,'name':'jack'}";
$arr3 = json_decode($json,1);       //会转成数组
$obj2 = json_decode($json);         //会转成对象

5, 数组的日常使用, 循环

/** --------------------------  循环 ------------------------------------ */
$arr = array("hello1","hello2","hello3","hello4","hello5",);
$count = count($arr); //获得数组长度

for ($i = 0; $i < $count; $i++){
    echo $arr[$i];
}

//增强, 增强for不能改变数组参数
foreach ($arr as $item){
    echo $item;
}

//增强for , 改变数组参数, 使用&对地址进行引用
foreach ($arr as &$item){
    echo $item;
}

//循环键值对数组
$arr = array("a"=>1,"b"=>2,"c"=>3);
foreach ($arr as $key => $item){
    //$key  a b c
    //$item 1 2 3
    echo $key ." - ". $item;
}

6, 常用函数

/** -------------------------- 常用函数 ---------------------- */

//时间
$one_day = 86400;   //php 时间格式使用unix时间戳, 按秒计算

//格式化时间
// Y-m-d | Ymd | Y-m-d H:i:s
$today_str = date("Y-m-d",time());      //今天
$yesterday_str =  date("Y-m-d",time() - $one_day);  //昨天

//转换成unix时间戳
$today_unix = strtotime($today_str);

//字符分割
$str = "hello,world";
$strs = explode(",",$str);

//字符切割
$str1 = substr($str,2,4); //参数2, 开始位置, 参数3中止位置
$str2 = substr($str, 2);         //参数2, 开始以后的字符
$str3 = substr($str, -2);        //参数2, 从-2的位置开始以后的

//md5加密
$md5 = md5("123456");

array 数组拥有大量的api
https://www.runoob.com/php/php-ref-array.html 数组api,

二,数据库操作

1, 操作数据库有常用的三个方式,
mysql (已被遗弃)
mysqli 只支持mysql,除第三种方式外使用最广的
PDO 数据对象(PHP Data Object),支持多种数据库
2, 貌似在php中使用预定义sql并不多

<?php

class MySql
{

    private $mysqli = null;

    private static $host = "127.0.0.1";
    private static $port = 3306;
    private static $db_name = "test";
    private static $user = "root";
    private static $pass = "root";

    function __construct()	//__construct()是构造函数
    {
        $this->mysqli = new mysqli(self::$host, self::$user, self::$pass, self::$db_name, self::$port);
    }

    function query($sql)	//查询
    {
        $res = $this->mysqli->query($sql);
        if ($res) {
            $data = array();
            while ($row = $res->fetch_row()) {
                $data[] = $row;
            }
            $res->free();
            return $data;
        } else {
            return NULL;
        }
    }

    function execute($sql)		//执行sql
    {
        $res = $this->mysqli->query($sql);
        if (!$res) {
            return false;
        } else {
            return true;
        }
    }

    function insert($table,$row){
        $stat = '';
        foreach ($row as $k => $v) {
            $value = mysqli_real_escape_string($this->mysqli,$v);	//转义‘’, 防止sql注入
            $stat .= "`$k` = '$value',";
        }
        $stat = substr($stat, 0, strlen($stat) - 1);
        $sql = "INSERT INTO `{$table}` set $stat";
        $res = $this->mysqli->query($sql);
        if ($res){
            return mysqli_insert_id($this->mysqli);
        }else{
            return 0;
        }
    }
    
    function opentranstion(){
        $this->mysqli->autocommit(false);	//开启事务
    }

    function commit(){
        $this->mysqli->commit();			//提交事务
    }

    function close(){
        $this->mysqli->close();				//关闭连接
    }
}

三, php开发细节躺坑

1, 对象之间的弱引用

$a = new Person;
$b = $a;
//改变b, 并不会改变a对象的属性
//需要使用&
$b = &$a; 进行地址引用

2, php是基于一次请求的脚本, 一次请求执行完毕会释放本次请求加载的所有资源
3, php编译后就是c++,
4,如何销毁一个对象或者属性

$a = new Person;
unset($a);
//这样便会销毁, 但销毁的只是地址的引用, 内存还并没有释放, 且 $a = null

$arr = array("c"=>123);
unset($arr['c'])		//效果是一样的

5, http 超全局对象

$_POST;		//post请求提交数据,array
$_GET;		//get请求提交数据,array
$_REQUEST;	//请求数据包含get,post , array
$_SESSION;	//session, 请求session
$_COOKIE;	//游览器cookie, array

6,文件包含

include "MySql.php";		//包含
include_once("MySql.php");

require "MySql.php";
require_once ("MySql.php");

include函数:会将指定的文件读入并且执行里面的程序;
注意: 只有一个文件,是把包含的文件变成了自己代码的一部分,执行代码文件大

require函数:会将目标文件的内容读入,并且把自己本身代换成这些读入的内容;
注意: 是两个文件, 他会在引用处去调用被包含的文件里的代码,执行代码文件小

include_once 函数:在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次;
注意:includeinclude_once 执行报错只会抛出warning, 程序会继续执行

require_once 函数:和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
注意:requirerequire_once 执行报错只会抛出error, 程序会终止执行

7,错误,异常机制

php 大部分都是错误, 像notice, warning, fail, 看起来像是异常, 因为程序向下执行了,其实全部
都是错误。
try{
}catch($Exception $e){
} 
是捕获不到滴, 想的美!!!

php的异常捕获, 只能自己程序设计抛出, throw new XXException(), 
是不是很鸡肋啊, 楼主是不会用, 也不想用, 自己要是能抛出异常, 我干嘛要抛出啊
直接处理不好么??? 哈哈哈

8,程序正常退出

不想让代码进行往下运行了
exit(1)

9,在使用插件时, redis时先查看自己有没有安装redis插件
php操作redis api, https://www.cnblogs.com/aipiaoborensheng/p/5666005.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章