金剛鸚鵡(學舌(),毛,飛(),生長())==>鸚鵡類(學舌(),毛,飛(),生長())==>生物(生長());
複製代碼
[修飾符] class 類名{
[修飾符] [屬性]
[修飾符] [方法]
}
複製代碼
<?php
class Person{
public $name = 'xiaoming';
public $age = 18;
public $sex = 'man';
}
?>
複製代碼
屬性中的變量能夠初始化,可是初始化的值,必須是常數,能夠直接獲取值,不須要運算
php
從類實例化對象 $對象名 = new 類名() //"()"可加可不加
mysql
調用類的屬性和方法 用->
web
<?php
//定義一個類
class Person{
public name = null;
public function eat(){
echo "吃肉肉..........";
}
public function drink(){
echo "喝酒..........";
}
}
//把這個類實例化
$people = new Person;
$people->drink(); // 輸出 喝酒.........
$people->name = "張三"; //屬性賦值
echo $people->name; //屬性調用
?>
$this 當前方法或屬性的調用者
對象之間的賦值,是按引用傳遞.
複製代碼
class A extends B{
}
//A 是子類 B 是父類
複製代碼
權限控制符,用來修飾屬性和方法redis
權限控制符 public:公共的 protected:受保護的 private:私人的sql
構造方法__construct()__
mongodb
實例化對象時自動觸發數據庫
析構方法__destruct__
apache
對象銷燬時自動觸發,觸發時的三種方法編程
static 來定義靜態屬性和靜態方法,不用實例化對象,就能夠直接訪問,只能用類來訪問,使用::
來調用windows
<?php
class Test{
public static $course = "English";
public static $score;
}
echo Test::$course; //外部調用
複製代碼
<?php
// 內部調用 使用self::屬性/方法
class Test{
public static $course = "English";
public static $score = 0;
public static function hello(){
echo self::$score = 100; // 內部調用, 使用self::屬性/方法名
}
}
echo Test::hello();
複製代碼
定義常量,使用const關鍵字來定義一個常量,通常常量名都是大寫的,區分大小寫 常量不能修改值,只能銷燬後從新定義
在類中定義的常量只能經過靜態方式來調用
經過魔術方法,動態建立類屬性和方法
屬性重載 當調用當前環境下未定義
或者不可見
的類屬性或類方法時,重載方法會被調用
__set()
<?php
class Person
{
private $sex = 'male';
public function __set($name, $value)
{
echo $name, ' ', $value;
}
}
$stu = new Person();
$stu->sex = 'female';
複製代碼
__get()
<?php
class Person
{
private $sex = 'male';
protected $age = 39;
public function __get($name)
{
if ($name == 'age') {
echo "年齡 不是你想看, 想看就能看";
}
}
}
$stu = new Person();
$stu->age;
複製代碼
isset()
或empty()
時,__isset()
會被調用<?php
class Person
{
private $sex = 'male';
protected $age = 39;
public function __isset($name)
{
echo $name;
}
}
$stu = new Person();
isset($stu->sex);
複製代碼
unset()
時,__unset()
會被調用<?php
class Person
{
private $sex = 'male';
protected $age = 39;
public function __unset($name)
{
echo "您正在嘗試銷燬一個沒有權限的屬性 $name";
unset(this->$name);
}
}
$stu = new Person();
unset($stu->sex);
複製代碼
__call()
會被調用.<?php
class Person
{
private $sex = 'male';
protected $age = 39;
public function __call($name, $arguments)
{
var_dump($name); // 方法名字
var_dump($arguments); // 參數數組
}
protected function getSex()
{
echo $this->sex;
}
}
$stu = new Person();
$stu->getSex(1, 2, 3, 4);
複製代碼
__callStatic()
會被調用<?php
class Animal
{
private function eat()
{
echo 'eat';
}
public static function __callStatic($name, $arguments)
{
echo '調用不存在的--靜態--方法名是:' . $name . '參數是:';
print_r($arguments);
}
}
$animal = new Animal();
Animal::smile('可愛', '大笑', '微笑');
複製代碼
子類繼承父類全部的公有的和受保護的屬性和方法
<?php
class People
{
public $name = "lisi";
protected $age = 39;
private $salary = 1000;
}
class Person extends People
{
}
$P1 = new Person();
echo $P1->name;
echo $P1->age; // 報錯
echo $P1->salary; // 報錯
複製代碼
繼承關鍵字extends
,一個類繼承另外一個類,不能繼承多個,能夠鏈式繼承
class A extends B; //類A 繼承 類B
class C extends A; //類C 繼承 類A
複製代碼
重寫:繼承父類中的方法,子類中定義的與父類中同名的方法
當一個子類重寫其父類的方法時,PHP不會調用父類中已被重寫的方法,是否調用父類的方法取決於子類
<?php
class Person
{
public function sayHi()
{
echo "hi";
}
}
class Student extends Person
{
public function sayHi()
{
echo 'hello';
}
}
$stu = new Student();
$stu->sayHi();
複製代碼
關鍵字 parent::
訪問父類中被重寫的屬性和方法,能夠再父類原有的代碼上追加新的代碼
<?php
class Person
{
public function sayHi()
{
echo "hi";
}
}
class Student extends Person
{
public function sayHi()
{
parent::sayHi();
echo " and say Hello";
}
}
$stu = new Student();
$stu->sayHi();
複製代碼
若是一個類被聲明爲final
,則不能被繼承.
<?php
final class Person{
public $name = 'lisi';
}
class Student extends Person{
public $sex = 'male';
} // 報錯, 不能繼承
複製代碼
<?php
// 去掉final, 則沒有問題
class Person
{
public $name = 'lisi';
}
class Student extends Person
{
public $sex = 'male';
}
複製代碼
若是父類中的方法被聲明爲final
,則子類沒法重寫該方法
<?php
// 繼承父類的方法
class Person
{
public $name = 'lisi';
public function getName()
{
echo $this->name;
}
}
class Student extends Person
{
public function getName()
{
parent::getName();
echo "\n";
echo "能夠繼承父類!";
}
}
$stu = new Student();
$stu->getName();
複製代碼
一樣的代碼,若是在getName函數前,添加final,則會報錯
<?php
class Person
{
public $name = 'lisi';
final public function getName() // 會報錯
{
echo $this->name;
}
}
class Student extends Person
{
public function getName()
{
parent::getName();
echo "\n";
echo "能夠繼承父類!";
}
}
$stu = new Student();
$stu->getName();
複製代碼
Polymorphism
)按字面意思就是'多種狀態'abstract
abstract class Person{
abstarct public people(){
}
}
複製代碼
<?php
abstract class MyAbsClass
{
abstract public function func();
}
class ChildClass extends MyAbsClass
{
// 這樣寫會報錯, 由於沒有實現抽象類中定義的方法
}
複製代碼
<?php
abstract class MyAbsClass
{
abstract public function func();
}
class ChildClass extends MyAbsClass
{
public function func()
{
// 即使什麼都沒有寫, 也沒有關係...
}
}
複製代碼
<?php
abstract class MyAbsClass
{
abstract public function func();
}
abstract class ChildClass extends MyAbsClass
{
// 什麼都沒寫, 也不會報錯...
}
複製代碼
abstract class MyAbsClass
{
public function func(); // 會報錯, 由於沒有abstract關鍵字
}
複製代碼
class MyAbsClass // 會報錯, 由於沒有abstract關鍵字
{
abstract public function func();
}
複製代碼
<?php
abstract class MyAbsClass
{
public $name = '張三';
public $age;
public function test()
{
echo 'hello';
}
abstract public function func();
}
複製代碼
final public static function
<?php
interface MyInterface
{
const NUM = 123;
public function func();
public function test();
}
class MyClass implements MyInterface
{
public function func()
{
}
public function test()
{
echo 'hello';
}
}
複製代碼
<?php
interface MyInterface
{
const NUM = 123;
public function func();
public function test()
{
echo "test"; // 會報錯, 不能有具體方法
};
}
複製代碼
<?php
interface MyInterface
{
const NUM = 123;
public function func();
public function test();
}
class MyClass implements MyInterface
{
public function func()
{
}
// 報錯, 由於沒有實現test()
}
複製代碼
<?php
interface MyInterface
{
const NUM = 123;
public function func();
public function test();
}
abstract class MyClass implements MyInterface
{
// 沒有實現接口的方法, 也不會報錯
}
class Demo extends MyClass
{
public function func()
{
// 必須實現, 不然報錯
}
public function test()
{
// 必須實現, 不然報錯
}
}
複製代碼
<?php
interface A
{
public function aaa();
}
interface B extends A
{
public function bbb();
}
class C implements A
{
public function bbb()
{
//
}
public function aaa()
{
}
}
複製代碼
<?php
interface A
{
public function aaa();
}
interface B
{
public function bbb();
}
class C implements A, B
{
public function bbb()
{
// 都得實現, 否則報錯
}
public function aaa()
{
// 都得實現, 否則報錯
}
}
複製代碼
<?php
interface A
{
public function aaa();
}
interface B
{
public function bbb();
}
class C
{
public function bbb()
{
}
public function aaa()
{
}
}
class D extends C implements A, B
{
// 類D繼承C, C實現了A和B
}
複製代碼
1.抽象類有普通的方法,接口沒有
2.抽象類能夠有本身的成員屬性和方法,接口只能有public 常量。
3.抽象類無關緊要構造方法,接口沒有構造方法
4.抽象類單繼承,接口多重繼承
instanceof
用於肯定一個PHP變量是否屬於某一類class的實例<?php
class A
{
}
class B
{
}
$a = new A();
var_dump($a instanceof A); // true
var_dump($a instanceof B); // false
複製代碼
instanceof
也可用來肯定一個變量是否是繼承自某一父類的子類的實例<?php
class A extends B
{
}
class B
{
}
$a = new A();
var_dump($a instanceof A); // true
var_dump($a instanceof B); // true
複製代碼
instanceof
也可用於肯定一個變量是否是實現了某個接口的對象的實例<?php
class A implements B
{
}
interface B
{
}
$a = new A();
var_dump($a instanceof A); // true
var_dump($a instanceof B); // true
複製代碼
<?php
class A
{
}
class B
{
}
$a = new A();
$b = new B();
function test(A $n)
{
echo "ok";
}
test($a); // 輸出ok
test($b); // 報錯, 由於$b是B的實例, 不是A的實例
複製代碼
<?php
class A
{
public function aaa(B $n)
{
}
}
class B
{
}
class C extends B
{
public $a = '123';
}
class D extends A
{
}
$a = new A();
$c = new C();
$a->aaa($c);
複製代碼
__autoload()
函數也能自動加載類和接口spl_autoload_register()
函數能夠註冊任意數量的自動加載器,spl_autoload_register()
函數__autoload()
函數,在之後的版本中它可能被棄用定義命名空間
namespace
來聲明。定義子命名空間namespace MyProject\Sub\Level;
能夠在同一個文件中定義多個命名空間
若是沒有定義任何命名空間,全部的類與函數的定義都是在全局空間,與PHP引入命名空間概念前同樣。
在名稱前加上前綴\表示該名稱是全局空間中的名稱,即便該名稱位於其它的命名空間中時也是如此
__NAMESPACE__
常量
常量__NAMESPACE__
的值是包含當前命名空間名稱的字符串
在全局的,不包括在任何命名空間中的代碼,它包含一個空的字符串。
<?php
namespace hello\hello1;
var_dump(__NAMESPACE__); // hello\hello1
namespace hello\hello2;
var_dump(__NAMESPACE__); // hello\hello2
複製代碼<?php
var_dump(__NAMESPACE__); // ""
複製代碼非限定名稱, 徹底限定名稱, 限定名稱(絕對路徑, 相對路徑)
複製代碼
<?php
namespace A\B;
class MyClass
{
public function __construct()
{
echo '空間A\B 中的類 實例化了' . "\n";
}
}
namespace A;
class MyClass
{
public function __construct()
{
echo '空間A 中的類 實例化了' . "\n";
}
}
$obj = new MyClass();// 非限定名稱 就近
$obj = new \A\B\MyClass();// 徹底限定名稱 絕對路徑
$obj = new \A\MyClass();// 徹底限定名稱 絕對路徑
$obj = new B\MyClass();//限定名稱 相對路徑
複製代碼include不會改變當前命名空間, 可是include以後, 可使用引入文件中的命名空間
複製代碼
C:\Users\Administrator\Desktop\imooc\aaa.php
複製代碼
<?php
namespace aaa;
function demo()
{
echo 'aaa';
}
複製代碼
C:\Users\Administrator\Desktop\imooc\bbb.php
複製代碼
<?php
namespace bbb;
function demo()
{
echo 'bbb';
}
include 'aaa.php';
demo(); // bbb
var_dump(__NAMESPACE__); // bbb
\aaa\demo(); // 可使用aaa.php的命名空間
動態調用命名空間
複製代碼
動態調用函數
<?php
function demo()
{
echo "demo\n";
}
demo(); // 調用demo
$a = 'demo';
$a(); // 一樣能夠調用demo
複製代碼
動態實例化對象
<?php
class A
{
public function demo()
{
echo "demo\n";
}
}
$a = new A();
$a->demo();
$b = "A";
$c = new $b;
$c->demo();
複製代碼
//動態調用命名空間
<?php
namespace A\B;
function demo()
{
echo "demo\n";
}
namespace A;
demo(); // 會報錯, 由於當前命名空間下, 沒有demo()
複製代碼<?php
namespace A\B;
function demo()
{
echo "demo\n";
}
namespace A;
\A\B\demo(); // 這就會正常了
複製代碼
<?php
namespace A\B;
function demo()
{
echo "demo\n";
}
namespace A;
$a = '\A\B\demo'; // 效果同樣, 由於都是徹底限定名稱
$a = 'A\B\demo';
$a();
複製代碼
<?php
namespace A\B;
function demo()
{
echo "demo\n";
}
namespace A;
$a = 'B\demo'; // 報錯, 不支持相對路徑
$a();
複製代碼
異常
異常處理的實現
try{ //全部須要進行異常處理的代碼都必須放入這個代碼塊內
... // 在這裏可使用throw語句拋出一個異常對象
}catch(異常對象參數){ //使用該代碼塊捕獲一個異常,並進行處理
... //在這裏作異常處理。也能夠再次拋出異常
} [catch(,,){
.. .. ..
}]
複製代碼
工做原理
細節
實例
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
//建立一個異常對象,經過throw語句拋出
echo 'Never executed';
//從這裏開始,try代碼塊內的代碼將不會再被執行
} catch (Exception $e) {
echo 'Caught exception:'.$e->getMessage()."\n";
//輸出捕獲的異常消息
}
echo 'Hello World'; //程序沒有崩潰繼續向下執行
複製代碼
系統自帶的異常處理類
自定義異常
捕獲多個異常
mysqli優點及其簡介
開啓mysqli擴展
bool extension_loaded('mysqli');
MySQLi擴展面向對象數據庫的使用
$mysqli->set_charset("utf8")
設置數據庫編碼
4 執行SQL語句 執行查詢(select)語句
$mysqli->errno
獲得上一部操做產生的錯誤信息$mysqli-error
的道上一步操做產生的額錯誤信息執行非查詢語句
5 處理資源結果集
$result->free_result()
釋放結果集$mysqli->close()
關閉鏈接和mysqli和mysqli_result相比的優勢
效率高,安全,這是咱們使用mysqli_stmt的緣由,因此推薦你使用它
mysqli_stmt預處理類的成員方法
拓展 預處理機制(防止SQL語句惡意注入)
獲取預處理語句對象
$stmt=$mysqli->prepare(「insert into tableName values(?,?,?)」);
複製代碼
$stmt->prepare(「insert into tableName values(?,?,?)」);
複製代碼
綁定參數
$stmt->bind_param(‘類型’,分別對應?的變量名);
給綁定的變量賦值
執行準備好的sql語句,成功時返回 TRUE , 或者在失敗時返回 FALSE 。
$stmt->execte($sql);
處理操做的sql語句
$stmt->insert_id; //最後一次插入的id
$stmt->affected_rows; //最後一次操做影響的行數
使用預處理語句處理SELECT查詢結果
$stmt->bind_result($result);
while($stmt->fetch()){綁定的變量}
//bool mysqli_stmt::fetch(void)
複製代碼
$stmt->close();
$mysqli->close();
<?php
//獲取受影響行數
bool $stmt->store_result();//一次性將結果所有取出
$stmt->num_rows;//結果條數(先運行store_result)
// 處理查詢結果方式2
$resObj=$stmt->get_result();//獲取結果集
$arr=$resObj->fetch_all(MYSQL_ASSOC);//取出全部記錄
// 指針移動到n(先運行store_result)
$stmt->data_seek(n);
$stmt->fetch();
?>
複製代碼
<?php
$sql ="select id,goodsname,price from yhshop_goods;";
$sql .=" select * from yhshop_admin;";
$res=$mysqli->multi_query($sql);
if($res){
do{
if($mysqli_result=$mysqli->store_result()){
$row[]=$mysqli_result->fetch_all(MYSQLI_ASSOC);
}
}while($mysqli->more_results()&&$mysqli->next_result());
print_r($row);
}else{
echo $mysqli->error;
}
?>
複製代碼
事務處理 (多個SQL要完成的任務看爲是一個事務)一件事(有任何一個環節出錯,都整個事務撤消, 若是都成功纔去提交)
目前只有InnoDB和BDB支持事務
默認表都是自動提交的(autocommit)
步驟
PDO的做用
開啓PDO 擴展
使用PDO操做數據庫
<?php
try {
$dsn = "mysql:host=localhost;dbname=shop";
// 用戶名
$user = "root";
// 數據庫密碼
$pass = "root";
// pdo 對象
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_DEFAULT_FETCH_MODE => 2
);
$pdo = new PDO($dsn, $user, $pass, $options);
}
catch (PDOException $e){
echo $e->getMessage();
}
複製代碼
$pdo->exec('set names utf8');
處理非查詢SQL語句
$pdo->lastinsertid()
PDOStatement對象
PDOStatement對象成員方法
<?php
$username = $_POST['username'];
$username=$pdo->quote($username);//自動爲字符串加上引號<br>
$sql='select * from uesr where username={$username}'//這裏$username就不用加引號了
$stmt=$pdo->query($sql);//PDOStatement對象的方法:rowCount():對於select操做返回的結果集中記錄的條數,對於INSERT、UPDATE、DELETE返回受影響的記錄的條數
echo $stmt->rowCount();
?>
複製代碼
$pdo=new PDO('mysql:host=localhost;dbname=phptest','root','123456');
$sql="INSERT stu(name,classid) VALUES(:username,:classid)";
$stmt=$pdo->prepare($sql); //返回stmt對象
$stmt->bindParam(":username",$username,PDO::PARAM_STR);
$stmt->bindParam(":classid",$class,PDO::PARAM_STR);//將變量$class的引用綁定到查詢的名字參數‘:class’中
$username=king;$class='php05';$stmt->execute();
$pdo=new PDO('mysql:host=localhost;dbname=phptest','root','123456');
$sql="INSERT stu(name,classid) VALUES(?,?)";//一個(沒有傳值的)SQL語句
$stmt=$pdo->prepare($sql);//準備查詢語句
$stmt->bindParam(1,$username,PDO::PARAM_STR);
$stmt->bindParam(2,$class,PDO::PARAM_STR);//將變量$class綁定到查詢的第二個問號參數中
$username='lily';$class='php03'; //爲變量賦值
$stmt->execute(); //執行參數綁定值後的準備語句
複製代碼
Mysql>set autocommit=0;//關閉自動提交
Mysql>start transaction;//開啓事務
Mysql>commit;//提交
Mysql>rollback;//回滾
複製代碼
//1.關閉自動提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
//2.開啓事務:
$pdo->beginTransaction();
//提交一個事務:
$pdo->commit();
//回滾一個事務:
$pdo->rollback();
//檢測是否在一個事務內:
inTransaction()
複製代碼
try{
$dsn='mysql:host=localhost;dbname=phptest';
$username='root';$passwd='123456';
$options=array(PDO::ATTR_AUTOCOMMIT=>0);
$pdo=new PDO($dsn, $username, $passwd, $options);
$pdo->beginTransaction();//開啓事務
$sql='UPDATE userAccount SET money=money-2000 WHERE username="zs"';
$res1=$pdo->exec($sql);
if($res1==0){throw new PDOException(zs轉帳失敗'); } $res2=$pdo->exec('UPDATE userAccount SET money=money+2000 WHERE username="king"'); if($res2==0){throw new PDOException('king 接收失敗');} $pdo->commit();//提交事務 }catch(PDOException $e){ $pdo->rollBack(); //回滾事務 echo $e->getMessage(); } 複製代碼
memcache簡介
Memcache是一個高性能的分佈式的內存對象緩存系統。是個開源的軟件,能夠經過簡單的方法,管理數據庫在內存中的存取。簡單的說就是緩存數據庫查詢結果(數據)到內存中,而後從內存中讀取,從而大大提升讀取速度,減小數據庫訪問次數,以提升動態web應用的速度,提升可擴展性
怎麼理解memcache?====> Memcache 是隻有一張表的數據庫,這張表有兩個字段分別是主鍵key 和value,value就是咱們要保存的數據,key就是這個數據的id,用來保證咱們查找時候的惟一性
memcache使用場景
Memcache在WEB中的應用
memcache運行圖
// memcache 屬於一種非關係型數據庫 mysql 關係型數據庫
// memcache 屬於nosql的一種 not only sql redis ,mongodb
// 安裝memcache 完整過程
// 1.下載memcache windows 安裝包 下載地址: http://static.runoob.com/download/memcached-1.4.5-amd64.zip
// 2.安裝包解壓到任意磁盤下,個人位置 在E:/phpstudy/memcached.exe .dll
// 3. cmd 安裝 memcached.exe -d install /uninstall memcached.exe -d start /stop
// 4. 使用客戶端管理工具來鏈接memcache telnet(windows 命令) 127.0.0.1(服務器地址 localhost) 11211 (端口)
// 5. windows 裏開啓telnet 客戶端的命令
// 6. 開啓步驟 計算-->控制面板-->程序-->打開/關閉windows功能-->telnet 客戶端 勾選開啓
// 7.add 鍵名 標識 有效期(秒數,0表示永不過時) 長度 / add name 0 0 8 xiaoming
複製代碼
stats items 查看標記
stats cachedump 1 0
複製代碼
在php中安裝memcache拓展詳情點擊 blog.csdn.net/ad132126/ar…
實例化memcache類 $memcache=new memcache;
鏈接memcache服務器
參數1:主機(必寫);
參數2:Memcached服務的端口號,默認11211(可選)
複製代碼
$memcache->close()
memcache->add("test1","This is a test",false,0);
$memcache->add("test2",array("one","two"),MEMCACHE_COMPRESSED,60*60*24*30);
$memcache->add("test3",new Test(),MEMCACHE_COMPRESSED,time()+60*60*24*31);
複製代碼
function select($sql,Memcache $memcache){
$key=md5($sql); //md5 Sql命令做爲memcache 的惟一標識符
$data=$memcache->get($key);
if(!$data){
try{
$pdo=new PDO("mysql:host=localhost;dbname=php","root","root");
}catch(PDOException $e){
die('鏈接失敗');
}
$stmt=$pdo->prepare($sql);
$stmt->execute();
$data=$stmt->fetchAll(PDO::FETCH_ASSOC);
$memcache->add($key,$data,MEMCACHE_COMPRESSED,0);
}
return $data;
}
$memcache=new Memcache;
$memcache->connect('127.0.0.1',11211);
$data=select("select * from stu",$memcache);
var_dump($data);

複製代碼
$memcache = new Memcache;
$memcache->addServer('172.16.1.1', 11211);
$memcache->addServer('172.16.1.2', 11211);
$memcache->addServer('172.16.1.3', 11211);
複製代碼
//1. 建立對象
$mem = new Memcache();
//2. 添加服務
$mem->addServer("192.168.150.250",11211);
$mem->addServer("192.168.150.138",11211);
$mem->addServer("192.168.112.128",11211);
//3. 放置信息
$mem->add("mystr","hello memcache!",MEMCACHE_COMPRESSED,0);
$mem->add("myarray",array(10,20,30,40),MEMCACHE_COMPRESSED,0);
$mem->add("myob",new Stu(),MEMCACHE_COMPRESSED,0);
//4. 獲取信息
echo $mem->get("mystr")."<br/>";
var_dump($mem->get('myarray'));
echo "<br/>";
$mem->get("myob")->getinfo();
複製代碼
bool session_set_save_handler ( callable $open ,
callable $close , callable $read , callable $write ,
callable $destroy , callable $gc [, callable $create_sid ] )
複製代碼
session_set_save_handler() 設置用戶自定義 會話存儲函數。 若是想使用 PHP 內置的會話存儲機制以外的方式, 可使用本函數。 例如,能夠自定義會話存儲函數來將會話數據存儲到數據庫。這個函數共須要6個回調函數做爲必選參數,分別表明了session生命週期中的6個過程,用戶經過自定義每一個函數,來設置session週期中每一個環節的信息處理
參數
create table session(
sid char(32) not null default '',
update_time int not null default 0,
data text,
primary key(sid)
);
複製代碼