国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP面向?qū)ο笕筇攸c學習(充分理解抽象、封裝、繼承、多態(tài))

PHP面向?qū)ο笕筇攸c學習(充分理解抽象、封裝、繼承、多態(tài))

2019-12-31 17:07PHP教程網(wǎng) PHP教程

PHP面向?qū)ο笕筇攸c學習 學習目標:充分理解抽象、封裝、繼承、多態(tài)

面象對向的三大特點:封裝性、繼承性、多態(tài)性 首先簡單理解一下抽象:
我們在前面定義一個類的時候,實際上就是把一類事物共有的屬性和行為提取出來,形成一個物理模型(模版),這種研究問題的方法稱為抽象
PHP面向?qū)ο笕筇攸c學習(充分理解抽象、封裝、繼承、多態(tài))
一、封裝性 
封裝就是把抽取出來的數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護在內(nèi)部,程序的其他部分只有被授權(quán)的操作(方法)才能對數(shù)據(jù)進行操作。 
php提供了三種訪問控制修飾符 
public 表示全局,本類內(nèi)部,類外部,子類都可以訪問 
protected 表示受保護的,只有本類或子類可以訪問 
private 表示私有的,只有本類內(nèi)部可以訪問 
以上三種修飾符既可以修飾方法也可以修飾屬性(變量),方法如果沒有訪問修飾符則默認是public,成員屬性必須指定訪問修飾符,在PHP4中也有這種寫法 var $name,表示公開屬性,不推薦這種寫法 
例: 

復制代碼代碼如下:


<?php 
class Person{ 
public $name; 
protected $age; 
private $salary; 
function __construct($name,$age,$salary){ 
$this->name=$name; 
$this->age=$age; 
$this->salary=$salary; 

public function showinfo(){ 
//這表示三個修飾符都可以在本類內(nèi)部使用 
echo $this->name."||".$this->age."||".$this->salary; 


$p1=new Person('張三',20,3000); 
//這里屬于類外部,那么如果用下面的方法訪問age和salary都會報錯 
// echo $p1->age; echo$p1->salary; 
?> 


那么現(xiàn)在就想在外部訪問protected和private的元素和方法該怎么辦? 通常做法是通過public函數(shù)去訪問這些變量 格式: 
public function setxxxx($val){ 
$this->xxxx=$val; 

public function getxxxx(){ 
return $this->xxxx; 

這里帶set和get只是為了識別方便,并非必要 
如: 
public function getsalary(){ 
return $this->salary; //擴展:這里可以調(diào)用一些方法,如判斷用戶名等,正確才給訪問 

在外部就可以通過 echo $p1->getsalary(); 
如果要訪問 protected和private也可以使用以下方法,但不推薦使用,只要了解即可 
__set() 和 __get() 
__set()對protected或private屬性進行賦值操作 
__set($name,$val); 
__get()獲取 protected 或 private的值 
__get($name); 
如: 

復制代碼代碼如下:


<?php 
class testa{ 
protected $name; 
//使用__set()來管理所有屬性 
public function __set($pro_name,$pro_val){ 
//上面$pro_name和$pro_val可自定義 
//下面$this->pro_name為既定,不可更改 
$this->pro_name=$pro_val; 

//使用__get()來獲取所有屬性值 
public function __get($pro_name){ 
if(isset($pro_name)){ 
return $this->pro_name; 
} else { 
return null; 



$n1=new testa(); 
//正常情況,類外部是不能訪問protected屬性的,但是用了上面的方法就可以對它們進行操作 
$n1->name='小三'; 
echo $n1->name; 
?> 


//以上代碼看懂就行,不推薦使用 
二、繼承性 
先看一個例子: 

復制代碼代碼如下:


<?php 
class Pupil{ 
public $name; 
protected $age; 
public function getinfo(){ 
echo $this->name.'||'.$this->age; 

public function testing(){ 
echo 'this is pupil'; 


class Graduate{ 
public $name; 
protected $age; 
public function getinfo(){ 
echo $this->name.'||'.$this->age; 

public function testing(){ 
echo 'this is Graduate'; 


?> 


從上面的例子可以看出,當多個類有很多共同屬性和方法時,代碼的復用性不高,代碼冗余,思考css中的處理方法 
解決方法 :繼承 

復制代碼代碼如下:


<?php 
class Students{ 
public $name; 
public $age; 
public function __construct($name,$age){ 
$this->name=$name; 
$this->age=$age; 

public function showinfo(){ 
echo $this->name.'||'.$this->age; 


class Pupil extends Students{ 
function testing(){ 
echo 'Pupil '.$this->name.' is testing'; 


class Graduate extends Students{ 
function testing(){ 
echo 'Graduate '.$this->name.' is testing'; 


$stu1=new Pupil('張三',20); 
$stu1->showinfo(); 
echo '<br/>'; 
$stu1->testing(); 
?> 


從上面可以看出,繼承就是一個子類(Subclass)通過 extends 父類 把父類(BaseClass)中的public 和 protected 的屬性和方法繼續(xù)下來,不能繼承private屬性和方法 
語法結(jié)構(gòu): 
class 父類名{} 
class 子類名 extends 父類名{} 
細節(jié): 
1、一個子類只能繼承一個父類(這里指直接繼承);如果希望繼承多個類的屬性和方法,可以使用多層繼承 
例: 

復制代碼代碼如下:


<?php 
class A{ 
public $name='AAA'; 

class B extends A{ 
public $age=30; 

class C extends B{} 
$p=new C(); 
echo $p->name;//這里會輸出AAA 
?> 


2、在創(chuàng)建某個子類對象時,默認情況下不會自動調(diào)用其父類的構(gòu)造函數(shù) 
例: 
class A{ 
public function __construct(){ 
echo 'A'; 


class B extends A{ 
public function __construct(){ 
echo 'B'; 


$b=new B();//這里會優(yōu)先輸出B中的構(gòu)造方法,如果B中沒有構(gòu)造方法才會輸出A中的 
3、在子類中如果需要訪問父類的方法(構(gòu)造方法、成員方法 方法的修飾符為protected或private),那么可以使用 父類::方法名 或者 parent::方法名 來完成【這里parent和以前提到的self都均為小寫,大寫報錯】 
class A{ 
public function test(){ 
echo 'a_test'; 


class B extends A{ 
public function __construct(){ 
//兩種方法都行 
A::test(); 
parent::test(); 


$b=new B(); 
5、如果一個子類(派生類)的方法與父類的方法完全一樣時(public,protected),我們稱為方法覆蓋或方法重寫(override),看下面的多態(tài)性 
三、多態(tài)性 
例 : 

復制代碼代碼如下:


<?php 
class Animal{ 
public $name; 
public $price; 
function cry(){ 
echo 'i don\'t know'; 


class Dog extends Animal{ 
//覆蓋、重寫 
function cry(){ 
echo 'Wang Wang!'; 
Animal::cry();//這里不會報錯,能正確執(zhí)行父類的cry(); 


$dog1=new Dog(); 
$dog1->cry(); 
?> 


小結(jié): 
1、當一個父類知道所有的子類都有一個方法,但是父類不能確定該方法如何寫,可以讓子類去覆蓋它的方法,方法覆蓋(重寫),必須要求子類的方法名和參數(shù)個數(shù)完全一致 
2、如果子類要去調(diào)用父類的某個方法(protected/public),可以使用 父類名::方法名 或者 parent::方法名 
3、在實現(xiàn)方法重寫的時候,訪問修飾符可以不一樣,但是子類方法的訪問權(quán)限必須大于等于父類方法的訪問權(quán)限(即不能縮小父類方法的訪問權(quán)限) 
如 父類public function cry(){} 子類 protected function cry(){} 則會報錯 
但是子類的訪問權(quán)限可以放大,如: 
父類private function cry(){} 子類 protected function cry(){} 可以正確執(zhí)行 
擴展: 
方法重載(overload) 
基本概念:函數(shù)名相同,但參數(shù)的個數(shù)或參數(shù)的類型不同,達到調(diào)用同一個函數(shù),可以區(qū)分不同的函數(shù) 
在PHP5中雖然也支持重載,但是和其它語言還是有很大區(qū)別的,php中不能定義多個同名函數(shù) 
PHP5中提供了強大的“魔術”函數(shù),使用這些魔術函數(shù),我們可以做到函數(shù)重載, 
這里我們要到到 __call,當一個對象調(diào)一個方法時,而該方法不存在,則程序會自動調(diào)用__call 
【官方不推薦使用】 
PHP中有以下幾個魔術常量:__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ 等 
例: 

復制代碼代碼如下:


<?php 
class A{ 
function test1($p){ 
echo 'test1<br/>'; 

function test2($p){ 
echo 'test2<br/>'; 

function __call($method,$p){ 
//這里$p為數(shù)組,上面兩個變量名可自定義 
if($method == 'test'){ 
if(count($p)==1){ 
$this->test1($p); 
} else if(count($p)==2){ 
$this->test2($p); 




$a=new A(); 
$a->test(5); 
$a->test(3,5); 
?> 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 三区影院| 日韩成人影院 | 免费亚洲婷婷 | 在线成人av | 婷婷在线免费视频 | 精品中文字幕一区 | 欧美成人精品一区二区三区 | 最新黄色网址在线播放 | 可以在线观看的av网站 | 嫩草视频免费在线观看 | 久久99精品视频 | 午夜视频网 | 国产成年人视频 | 欧美日韩一区二区视频在线观看 | 欧美一区二区视频免费观看 | 国内自拍视频在线观看 | 欧美成人h版在线观看 | 日韩久久精品一区二区 | 一区在线视频观看 | 一区二区不卡视频 | 精品综合久久久 | 亚洲国产精品久久 | 国产精品综合一区二区 | 亚洲欧美一区二区三区四区 | 午夜资源| 男女做爰猛烈叫床无遮挡 | 精品成人国产在线观看男人呻吟 | 欧美精品在线一区 | 免费观看www7722午夜电影 | 色在线免费 | 欧美黄视频 | 乱人伦xxxx国语对白 | 一本大道久久a久久精二百 国产欧美视频一区二区 | 亚洲激情在线 | 国产视频黄在线观看 | 97久久精品 | 欧美日韩福利 | 日韩资源 | 北条麻妃99精品青青久久 | 日本 欧美 国产 | 欧美在线影院 |