js面向對象:
1.什么是對象?
對象:任何實體都是對象,擁有屬性和方法兩大特征
屬性:描述事物的特點;
方法:實物擁有的行為;
2.在JS里
Person.name="zhang"
Person.fn=function(){}
3.js中如何去生成對象?
(1)單例模式/字面量定義 var obj={name:"zhang"}
(2)var obj=new Object() 內置類
Obj.name="zhang"
js內置的類 string array object number boolean ?date function
(3)工廠模式
function create(){
var obj={}
Obj.name=
return obj;
}
(4)構造函數
function Person(){
this.name="li"
}
var zhang=new Person()
4.this的問題
this是關鍵字,它是一個對象;
函數外 this指向window;
函數內看帶不帶. 帶.就是.前面的對象,不帶.就是window
5.原型prototype
每個函數 類天生自帶一個prototype的屬性,這個屬性是個對象,它里面天生自帶一個constructor的屬性,屬性值是當前函數/類本身;
每個實例對象 天生自帶一個__proto__的屬性,這個屬性是對象,它指向當前實例對象的類的原型
6.類的繼承
對象復制
(1)通過for in 將父類的所有屬性變成子類的私有屬性
(2)Object.create() 將父類的屬性復制成子類公有的屬性
<1>原型繼承
將父類的實例賦值給子類的原型,父類實例的所有屬性成了子類的公有屬性
<2>call繼承 將父類私有的繼承為子類私有的
改變this指向的方法:
a.call()?
fn.call(div,)將fn中的this換成div然后再把fn調用;
b.apply()
c.bind()
d.提前聲明;
<3>冒充對象
冒充對象繼承利用for in ?將父類的所有屬性繼承為子類私有的
<4>混合繼承 call繼承和原型繼承結合
私有的繼承為私有的,私有的和公有的再次繼承為公有的
<5>組合繼承(寄生式繼承) ?call繼承和克隆的結合
? <6>中間類繼承 ?
偽數組
<7>拷貝繼承
淺拷貝
深拷貝
PHP面向對象:
1.類的創建 class創建類
2.對象的創建 ?使用new關鍵字;
3.成員的添加;
添加成員需要三個修飾符
public ?公開的,定義公共的屬性和方法,類的外部,類的內部,子類都可以使用;
protected ?受保護的,定義受保護的屬性和方法 只能在類的內部和子類里使用
private ?私有的,定義私有的屬性和方法,只能在自身的類里使用
方法成員如果前面不加修飾符,默認是public;
4.成員調用使用->符號;
使用成員屬性和方法的時候,屬性和方法前面不帶$符
5.特殊對象$this指向實例化的對象,如果類的方法里想使用類的其他屬性和方法得需要使用$this對象
6.構造方法 function__construct() ?構造函數在new實例化的時候系統會自動調用
7.析構方法
我們每次new實例化,系統就會給這個對象分配一個內存空間,如果不銷毀,系統壓力會很大,系統有一個析構方法 __destruct對象實例化之后系統會自動調用。內存銷毀的原則是先進后銷。
?
8.成員賦值
9.php中的繼承使用關鍵字extends
10.類中常量 使用const關鍵字定義常量,常量在定義和使用的時候不能帶$符。
使用的時候不能用$this ?使用范圍修飾符 :: 前面還是這個類名或self
如果子類想訪問父類中的常量 使用parent::常量名
11.靜態變量 在變量前加上關鍵字 static 靜態屬性 不能使用->訪問了,使用類名::$變量名:
12.重載 覆蓋
子類繼承父類的方法時,如果子類有和父類同名的方法,從父類那繼承的方法就會被覆蓋掉,這個就叫重載;
如果父類的方法前面加上final 則子類無法重載父類的方法,就會報錯。
13.調用父類的構造方法
php不會在子類的構造方法中自動的調用父類的構造方法,要執行父類的構造方法,需要在子類的構造方法在調用parent::__construct().
?
?
面向對象三大特征
封裝:對外只告訴你如何操作,內部結構不需要你知道。
對外只提供可操作的接口(方法),對內的數據操作不可見
繼承:子類可以繼承父類的屬性和方法,但是有限繼承,public protected private 修飾的屬性可以繼承protected public 修飾的方法 子類可以繼承,父類的常量也可以繼承。
多態:php沒有多態,因為php是弱類型語言,不會對變量提前進行類型聲明,但是有重載;
重載:父類和子類 方法相同 子類會覆蓋父類的方法。js也有重載。
?
?
?
?
?
?