面向?qū)ο蟮幕靖拍?/h1>
什么是類
類是由相同特征(屬性、靜態(tài)的)和行為(方法剪验、動作)的一組對象構(gòu)成
分類肴焊、類型、自定義類型
比如:人類...
什么是對象
對象就是一個一個的實(shí)體功戚,看得見娶眷、摸得著
比如:任何一個人的個體都是一個對象
類和對象的關(guān)系
類的實(shí)例就是對象,對象的抽象就是類
比如:將人類實(shí)例化才有人的個體啸臀,
所有的人都可以抽象的說他屬于人類
類的定義和類的實(shí)例
類的定義:
class 類名{
類中成員;
}
舉個栗子:
<?php
class Person {
//成員屬性: 姓名茂浮、性別、年齡、身高席揽、體重顽馋、電話等 -- 靜態(tài)描述
var $name;
//成員方法:說話、學(xué)習(xí)幌羞、走路寸谜、吃飯、開車属桦、敲代碼等 -- 動態(tài)描述
function say() { //聲明第一個成員方法熊痴,定義人說話的功能
//方法體
}
}
?>
類的實(shí)例:
通過關(guān)鍵字new 來聲明一個對象,并使用 對象名->成員屬性/方法 操作對象屬性
舉個栗子:
<?php
class Person {
public $name;
public function say() {
echo '哇哦~哇哦~哇哦~哇哦!';
}
}
$person = new Person();
$person->name = '小團(tuán)團(tuán)';
echo "person的名字是:".$person->name."";
$person ->say();
?>
類常量
常量是不會改變的值聂宾,是一個恒值
定義常量使用關(guān)鍵字const
常量輸出格式 類名::常量名
注意:在定義和使用常量的時候不需要使用 $ 符號
舉個栗子:
<?php
class Person {
const PERSON_NAME = ''人類'';
}
echo Person::PERSON_NAME;
?>
$this的使用
變量 this->可以調(diào)用類中方法,$this只能用在成員方法中系谐,其它任何地方都不能使用巾陕。
舉個栗子:
<?php
class People {
public $name;
function setName($par){
$this->name= $par;
}
function getName(){
echo $this->name;
}
}
$tuantuan= new People ;
$tuantuan->setTitle( "一條小團(tuán)團(tuán)" );
// 調(diào)用成員函數(shù),獲取名字
$tuantuan->getTitle();
?>
封裝/繼承/多態(tài)
定義成員變量時的關(guān)鍵字:public纪他、private鄙煤、protected
public -- 公開成員,可以在程序中的任何位置(類內(nèi)/外)被其他的類/子類和對象調(diào)用茶袒。
private -- 私有成員梯刚,只能在所屬類的內(nèi)部被調(diào)用和修改,不可以再類外/子類被訪問
protected -- 保護(hù)成員薪寓,在本類和子類中被調(diào)用亡资,其他地方則不可以被調(diào)用
封裝:
也可以稱為信息隱藏,封裝后對外只提供可操作的方法向叉,不會告訴你內(nèi)部結(jié)構(gòu)锥腻。封裝一個類需要兩步 第一步是私有化一個類 第二步是用set和get 做出讀取賦值的操作
預(yù)定義兩種函數(shù)來進(jìn)行獲取與敷值操作
__get 獲取值
__set 設(shè)置值
<?php
class Person {
private $name;
private function __get($property_name) { //__get()方法用來獲取私有屬性
echo "在直接獲取私有屬性值的時候,自動調(diào)用了這個__get()方法<br>";
if(isset($this->$property_name)) {
return($this->$property_name);
} else { return(NULL); }
}
private function __set($property_name, $value) { //__set()方法用來設(shè)置私有屬性
echo "在直接設(shè)置私有屬性值的時候植康,自動調(diào)用了這個__set()方法為私有屬性賦值<br>";
$this->$property_name = $value;
}
}
$p1=newPerson();
$p1->name="張三"; //直接為私有屬性賦值的操作,會自動調(diào)用__set()方法進(jìn)行賦值
echo "年齡:".$p1->name."<br>"; //直接獲取私有屬性值展懈,會自動調(diào)用__get()方法销睁,返回成員屬性值
?>
繼承
繼承:子類可以繼承父類的屬性和方法,但是是有限繼承存崖,public冻记、protected、private三個修飾的屬性都可以繼承来惧,public冗栗、protected兩個修飾的方法可以繼承,父類的常量可以繼承。
extends聲明繼承關(guān)系
語法格式:class B extends A 此范例指明 B繼承了A
子類繼承父類的所有內(nèi)容隅居,但父類中的private部分不能直接訪問
子類中新增加的屬性和方法是對父類的擴(kuò)展
子類中定義的與父類同名的屬性是對父類屬性的覆蓋钠至,同名的方法也是對父類方法的覆蓋
重寫的方法
在子類中,使用parent訪問父類中的被覆蓋的屬性和方法
parent::__construct();
parent::$name;
parent::fun();
clone克窿對象 語法格式
$c=clone $p;
p 輸出
echo $c->name;
多態(tài)
多態(tài):同一個操作(函數(shù))作用于不同的類的實(shí)例胎源,將產(chǎn)生不同的執(zhí)行結(jié)果
舉個栗子:
<?php
class Animal{
public $name;
public $price;
function talk(){
echo 'wu wu wu';
}
}
class Dog extends Animal{
//覆蓋棉钧、重寫
function talk(){
echo 'Wang Wang!';
Animal::talk();//這里不會報錯,能正確執(zhí)行父類的talk();
}
}
$dog1=new Dog();
$dog1->talk();
?>
構(gòu)造方法和析構(gòu)方法
構(gòu)造方法:生成對象時自動執(zhí)行的成員方法涕蚤,作用就是初始化對象宪卿。該方法可以沒有參數(shù),可以有多個參數(shù)万栅。定義構(gòu)造方法:void __construct (arg)
舉個栗子:
<?php
class Person{
public $name;
public $age;
function __construct($p1, $p2){//使用構(gòu)造方法給自己的成員屬性賦值
$this->name = $p1;
$this->age = $p2;
}
function say(){
echo "我叫{$this->name}佑钾,我今年{$this->age}<br>";
}
}
$person= new Person('小仙女', 18);
$person->say();
?>
析構(gòu)方法:與構(gòu)造函數(shù)相反,當(dāng)對象結(jié)束其生命周期時(例如對象所在的函數(shù)已調(diào)用完畢)烦粒,系統(tǒng)自動執(zhí)行析構(gòu)函數(shù)休溶,作用時釋放內(nèi)存。定義析構(gòu)方法: void __destruct()
舉個栗子:
<?php
class Person{
public $name;
function __construct($p){
$this->name = $p;
echo "我的名字是{$this->name},很高興認(rèn)識你撒遣。<br>";
}
//聲明一個析構(gòu)方法邮偎,在對象銷毀前自動調(diào)用
function __destruct(){
echo "感謝相遇{$this->name}先生,珍重!<br>";
}
}
$person= new Person('易烊千璽');
?>
靜態(tài)變量和靜態(tài)方法
static -- 靜態(tài)成員义黎,不需要實(shí)例化對象即可使用禾进,在對象被銷毀后仍可保存被修改的值
寫法:
static $屬性名/static fun()
使用:
類名::$屬性名/類名::方法名
舉個栗子:
<?php
class Math{
static $a = 0;
static function b ($x,$y){
$q = $x + $y;
return $p;
}
}
$matn_a = Math::$a;//調(diào)用類中的靜態(tài)屬性
var_dump($matn_a);
$math_b = Math::b(2,3);//調(diào)用類中的靜態(tài)方法
var_dump($math_b);
?>