国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 php手冊 PHP面向?qū)ο笕筇攸c學(xué)習(xí)(充分理解抽象、封裝、繼承、多態(tài))

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

Jun 13, 2016 pm 12:00 PM
php 多態(tài) 學(xué)習(xí) 對象 封裝 抽象 特點 理解 繼承 面向

面象對向的三大特點:封裝性、繼承性、多態(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,表示公開屬性,不推薦這種寫法
例:

復(fù)制代碼 代碼如下:


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);
如:

復(fù)制代碼 代碼如下:


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;
?>


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

復(fù)制代碼 代碼如下:


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';
}
}
?>


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

復(fù)制代碼 代碼如下:


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 '
';
$stu1->testing();
?>


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

復(fù)制代碼 代碼如下:


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)性
例 :

復(fù)制代碼 代碼如下:


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ù)函數(shù),我們可以做到函數(shù)重載,
這里我們要到到 __call,當一個對象調(diào)一個方法時,而該方法不存在,則程序會自動調(diào)用__call
【官方不推薦使用】
PHP中有以下幾個魔術(shù)常量:__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ 等
例:

復(fù)制代碼 代碼如下:


class A{
function test1($p){
echo 'test1
';
}
function test2($p){
echo 'test2
';
}
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);
?>

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

為什么我們評論:PHP指南 為什么我們評論:PHP指南 Jul 15, 2025 am 02:48 AM

PHPhasthreecommentstyles://,#forsingle-lineand/.../formulti-line.Usecommentstoexplainwhycodeexists,notwhatitdoes.MarkTODO/FIXMEitemsanddisablecodetemporarilyduringdebugging.Avoidover-commentingsimplelogic.Writeconcise,grammaticallycorrectcommentsandu

如何在Windows上安裝PHP 如何在Windows上安裝PHP Jul 15, 2025 am 02:46 AM

安裝PHP在Windows上的關(guān)鍵步驟包括:1.下載合適的PHP版本并解壓,推薦使用ThreadSafe版本配合Apache或NonThreadSafe版本配合Nginx;2.配置php.ini文件,將php.ini-development或php.ini-production重命名為php.ini;3.將PHP路徑添加到系統(tǒng)環(huán)境變量Path中以便命令行使用;4.測試PHP是否安裝成功,通過命令行執(zhí)行php-v和運行內(nèi)置服務(wù)器測試解析能力;5.若使用Apache,需在httpd.conf中配置P

PHP語法:基礎(chǔ)知識 PHP語法:基礎(chǔ)知識 Jul 15, 2025 am 02:46 AM

PHP的基礎(chǔ)語法包括四個關(guān)鍵點:1.PHP標簽必須使用結(jié)束,推薦使用完整標簽;2.輸出內(nèi)容常用echo和print,其中echo支持多參數(shù)且效率更高;3.注釋方式有//、#和//,用于提升代碼可讀性;4.每條語句必須以分號結(jié)尾,空格和換行不影響執(zhí)行但影響可讀性。掌握這些基本規(guī)則有助于寫出清晰穩(wěn)定的PHP代碼。

PHP 8安裝指南 PHP 8安裝指南 Jul 16, 2025 am 03:41 AM

在Ubuntu上安裝PHP8的步驟為:1.更新軟件包列表;2.安裝PHP8及基礎(chǔ)組件;3.檢查版本確認安裝成功;4.按需安裝額外模塊。Windows用戶可下載ZIP包并解壓,隨后修改配置文件、啟用擴展并將路徑加入環(huán)境變量。macOS用戶推薦使用Homebrew安裝,依次執(zhí)行添加tap、安裝PHP8、設(shè)置默認版本及驗證版本等步驟。不同系統(tǒng)下安裝方式雖有差異,但流程清晰,根據(jù)用途選對方法即可。

什么是PHP,它是用什么? 什么是PHP,它是用什么? Jul 16, 2025 am 03:45 AM

PHPisaserver-sidescriptinglanguageusedforwebdevelopment,especiallyfordynamicwebsitesandCMSplatformslikeWordPress.Itrunsontheserver,processesdata,interactswithdatabases,andsendsHTMLtobrowsers.Commonusesincludeuserauthentication,e-commerceplatforms,for

您的第一個PHP腳本:實用介紹 您的第一個PHP腳本:實用介紹 Jul 16, 2025 am 03:42 AM

如何開始編寫第一個PHP腳本?首先設(shè)置本地開發(fā)環(huán)境,安裝XAMPP/MAMP/LAMP,使用文本編輯器,了解服務(wù)器運行原理。其次,創(chuàng)建一個名為hello.php的文件,輸入基本代碼并運行測試。第三,學(xué)習(xí)混合使用PHP與HTML以實現(xiàn)動態(tài)內(nèi)容輸出。最后,注意常見錯誤如缺少分號、引用問題及文件擴展名錯誤,并開啟錯誤報告以便調(diào)試。

您如何處理PHP中的文件操作(閱讀/寫作)? 您如何處理PHP中的文件操作(閱讀/寫作)? Jul 16, 2025 am 03:48 AM

tohandlefileoperationsinphp,useApprepreprunctions andModes.1.toreadafile,usefile_get_contents()forsmallfilesorfgets()inaloopforline by line-line-processing.2.towriteToafile,usefile_put_cte_contents(usefile_contents)(

python如果還有示例 python如果還有示例 Jul 15, 2025 am 02:55 AM

寫Python的ifelse語句關(guān)鍵在于理解邏輯結(jié)構(gòu)與細節(jié)。1.基礎(chǔ)結(jié)構(gòu)是if條件成立執(zhí)行一段代碼,否則執(zhí)行else部分,else可選;2.多條件判斷用elif實現(xiàn),順序執(zhí)行且一旦滿足即停止;3.嵌套if用于進一步細分判斷,建議不超過兩層;4.簡潔場景可用三元表達式替代簡單ifelse。注意縮進、條件順序及邏輯完整性,才能寫出清晰穩(wěn)定的判斷代碼。

See all articles