11.7學習筆記
oop:面向物件的思想 (封裝 繼承 多型)
1: extends 繼承 (單繼承)
2:final :最終
3: 3個訪問修飾符
public 公共的 所有地方都可以訪問
protected 類的內部 和子類中可以訪問
private 類的內部訪問
4:static :靜態的 類名::靜態方法 (把屬性靜態化,那麼方法也要做一個靜態化)
呼叫靜態屬性 self::屬性名
5:const :定義常量 類裡面呼叫常量 self::常量名 define():定義常量
6:__clone : 克隆
克隆一個物件
//要這個克隆方法
public function __clone()
{
}
克隆例項的物件
7:值傳遞與引用傳遞
//值傳遞 引用傳遞 & 借用 引用
例子:
class S{
public static function show(&$a)
{
$a+=2;
}
}
$a=2;
S::show($a);
echo ($a);
值傳遞:當兩個變數(整型,字串等)相互賦值時,在記憶體會複製原變數的記憶體,另起一塊記憶體
引用傳遞:通常發生在兩個物件相互賦值時。兩個變數會同時指向同一塊記憶體
__FILE__ 魔術方法 __get()
__isset() //__isset(‘屬性名’),當對1個不存在的屬性使用isset時呼叫
isset() // 判斷是否有值
__unset() //__unset(‘屬性名’),對1個不存在的屬性使用unset時呼叫
public $name
$this->name
$this->cc
__unset(cc);
unset() //清空變數的值 (一般用於清除session)☆
empty() // 判斷是否值是否為空
__autoload() //自動載入
定義 : __ autoload(‘類名’),當例項化失敗時觸發,通常用於自動載入
作用:避免載入過多的沒用的類庫,可以確保在呼叫時才載入
8:抽象方法 抽象類 (abstract : 抽象 抽象方法abstract來修飾,或者抽象類abstract來修飾 )
(1):抽象方法是指在類裡面定義的沒有方法體的方法,所謂的沒有方法體指的是,在方法宣告的時候沒有大括號以及其中的內容,而是直接在宣告時在方法名後加上分號結束,另外在宣告抽象方法時還要加一個關鍵字“abstract”來修飾;
(2):在類中定義了抽象方法,那麼這個類一定也要定義為抽象類(abstract)
abstract class C
{}
(3):類中定義了抽象方法,那麼在子類中一定要去實現
類中定義抽象方法不需要括號直接用分號結束.
(4):可以定義多個抽象方法,但是在子類中一定要去實現定義的抽象方法.
(5):規範系統中每個子類某些方法的命名規範。通常用於團隊開發中。主要意義在於便於維護或後續工作人員理解程式碼
(6):抽象類不可以例項化
(7):在抽象類中可以存在完全方法,而且子類不一定要實現
(8):抽象方法不能是私有的,因為私有方法不能被過載(重寫,覆蓋)
9:Instanceof :判斷變數是否是某個物件例項 (變數 Instanceof 例項物件)
例子:
<?php
class A
{
}
class B{
}
class C extends A{
}
$a = new A();
$b = new B();
$c = new C();
if($a Instanceof b)
{
echo ("y");
}else
{
echo ("n");
}
?>
10:interface :介面 xml
宣告一個介面
interface 名字
(1):介面不能用來繼承實現
(2):介面名字 (要遵守命名規則) 介面不用關鍵字class去宣告
(3):實現介面:介面實現implements
(4):定義了介面類 不能被例項化
(5):定義介面類裡面方法 ,那要用 implements去實現介面
(6):定義了介面類裡面的方法,一定要去實現接口裡面的方法
(7):可以定義多個介面,且一定要去實現介面,實現多個介面用逗號隔開 class C implements A,B
(8):一個interface只能定義一個介面,定義多個介面用 多個interface定義.
例子;
<?php
/*class Man
{
public function show()
{
echo ("adsf");
}
}
$m = new Man();
$m->show();*/
interface A
{
//定義方法
public function show();
}
class C implements A
{
public function show(){
echo ("asd");
}
}
$c = new C();
$c->show();
?>
11:序列化: serialize(),把物件轉化為二進位制的字串
反序列化: unserialize(),把物件轉化的二進位制字串再轉化為物件
例子;
<?php
class Stu{
public $name;
public function Stu($name)
{
$this->name = $name;
}
public function show()
{
echo ($this->name);
}
}
$s = new Stu("武大郎");
$s->show();
//O:3:"Stu":1:{s:4:"name";s:6:"武大郎";}
$sd = serialize($s);//轉換成二進位制的字串
echo ($sd);
$b = unserialize($sd);
$b->show();
?>
12:單例模式
設計模式(Design pattern):是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結,是一種在程式設計過程中發現的習慣性用法 .
使用設計模式可以更快開發出健壯的 程式。能夠有效的提高程式碼的可重用性、讓程式碼更容易被他人理解、保證程式碼的可靠性,程式碼更好的維護.
1:單件模式(Singleton) 單例模式 (一個類只能讓他例項一次) (通常會用在資料庫例項)
例子1:
<?php
//模擬一個數據庫表連線
class Mysqldb{
public $dbname;
//申明一個靜態私有的屬性來進行儲存有沒有例項物件,預設沒有進行例項。
private static $dbin = NULL;
private function Mysqldb($dbname)
{
$this->dbname = $dbname;
}
//申明一個方法進行單例模式
public static function dbinster()
{
if(self::$dbin == NULL)
{
self::$dbin = new self("bbscms");
}
return self::$dbin;
}
//防止外部克隆
private function __clone()
{
}
public function dbselect()
{
echo($this->dbname);
}
}
/* $m = new Mysqldb("bbscms");
$m->dbselect();*/
/*$m = new Mysqldb("bbscms");
$m->dbselect();
$m = new Mysqldb("bbscms");
$m->dbselect();*/
$a = Mysqldb::dbinster();
$a->dbselect();
/*$b = clone($a);
$b->dbselect();
*/
/*$a = Mysqldb::dbinster();
$a->dbselect();
$a = Mysqldb::dbinster();
$a->dbselect();*/
?>
例子2:
<?php
//連線資料庫做個單例模式
class Dbmysql{
private static $link = NULL;//連線資料庫,預設沒有連線
private function Dbmysql()
{
//操作連線資料庫
self::$link = mysqli_connect("127.0.0.1","root","root")or die("連線失敗");
mysqli_select_db(self::$link,"bbscms");//選擇操作的資料庫
mysqli_set_charset(self::$link,"utf8");
}
//防止外部克隆
private function __clone()
{
}
public static function select()
{
//從資料庫裡面查詢資料
$sql = "select * from news";
$res = mysqli_query(self::$link,$sql);
$row = mysqli_fetch_assoc($res);
return $row;
}
public static function get(){
$a = new Dbmysql();
return $a;
}
}
//$d = new Dbmysql();
//$d = new Dbmysql();
$b = Dbmysql::get();
$n = $b->select();
print_r($n);
?>
14:名稱空間(名稱空間) 5.4版本以上 (防止取取相同的類名或者方法名)
namespace :名稱空間
宣告名稱空間必須在類的上面去宣告
namespace 名字\名字1
use App\Stu; //use 引入名稱空間下的類
thinkphp 框架 會使用