前言
博主不会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,如何销毁一个对象或者属性
$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 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次;
注意:include 和 include_once 执行报错只会抛出warning, 程序会继续执行
require_once 函数:和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
注意:require 和 require_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