前言
博主不會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 語句類似,唯一區別是如果該文件中已經被包含過,則不會再次包含。如同此語句名字暗示的那樣,只會包含一次;
注意: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