1. 程式人生 > >11.7學習筆記

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 框架 會使用