Ⅰ 為啥php的多態是假多態
1.多態是指在面向對象中能夠根據使用類的上下文來重新定義或改變類的性質和行為。
2.PHP不支持重載實現多態,但是PHP可以變向的實現多態效果。
3.php其語法特點,不支持固定變數類型,它是根據上下文來確定當前的類型是什麼,即,最後一次賦值是什麼類型,現在它就是什麼類型。也就不存在將子類
變數賦給基類變數的說法。但php函數的參數,是可以規定類型的,如下面的show函數。如果傳遞一個不是此類型的參數,將會在運行時報錯。
代碼如下:
<?php
/**
*虛基類
*/
abstractclassT{
abstractfunctionshow();
}
/**
*子類
*/
classT1extendsT{
publicfunctionshow(){
echo"T1fromabstractclass!<br/>";
}
publicfunctionshow1(){
echo"T1notfromabstractclass!<br/>";
}
}
/**
*子類
*/
classT2extendsT{
publicfunctionshow(){
echo"T2fromabstractclass!<br/>";
}
publicfunctionshow1(){
echo"T2notfromabstractclass!<br/>";
}
}
classT3{
publicfunctionshow(){
echo"inT3!<br/>";
}
publicfunctionshow1(){
echo"inT3!<br/>";
}
}
$t1=newT1();
$t2=newT2();
$t3=newT3();
show($t1);
show($t2);
//報錯,$t3不是T,所以被show函數調用的時候,會報類型不對的錯誤
//show($t3);
functionshow(T$t){//注意參數的類型
$t->show();
$t->show1();
}
?>
Ⅱ PHP多態代碼實例
這篇文章主要介紹了PHP多態代碼實例,本文用2個代碼實例來演示PHP中的多態,需要的朋友可以參考下
多態定義:只關心一個介面或者基類,而不關心一個對象的具體類。(同一類型,不同結果)
這里兩個例子:
第一個,我們發現,基類定義了標准,子類進行了自我規則的實現。這是多態的一個要求。同時,這是滿足重寫;實際上這是不同類的不同表現;沒有嚴格滿足一個介面,或者基類編程。因為你調用的時候不是
stu-showGrade()
而是各自自己的方法;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class
stu{
public
function
showGrade(){
echo
base
class;
}
}
class
xiaomin
extends
stu{
public
function
showGrade(){
echo
is
son
show
80;
}
}
class
xiaoli
extends
stu{
public
function
showGrade(){
echo
is
son
show
60;
}
}
function
doit($obj){
if(get_class($obj)
!=
stu){
$obj-showGrade();
}
}
doit(new
xiaoli());
doit(new
xiaomin());
第二個例子:dovoice
參數規定了$obj
為animal,意識就是用介面
接受了
實現類對象。了向上轉型。這就符合同一類型,不同結果了,這就是多態;
實際上在java中
會是
animal
a
=
new
dog();這樣子的;因為PHP
是若類型語言。沒有對象轉型機制。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface
animal{
public
function
voice();
}
class
cat
implements
animal{
public
function
voice(){
echo
miao~~~br;
}
}
class
dog
implements
animal{
public
function
voice(){
echo
wang
~~~br;
}
}
function
dovoice(animal
$obj){
$obj-voice();
}
dovoice(new
dog());
dovoice(new
cat());
Ⅲ php 方法重寫和多態的區別
重寫是多態實現方法的一種,多態的實現方法包括但不局限於重寫,二者不是並列關系!多態是一種思想,重寫是一種方法!
換句話說,只會執行子類,不會執行父類。如果一定要執行父類,那麼就要用到關鍵詞parent。
Ⅳ PHP中多態如何實現
用trait,定義類,在被繼承的類中,use,定義的trait類。
ps:use,可以多個,就是php中簡單的多態的實現
Ⅳ php中什麼是多態
多態就是同一個行為,作用不同的對象返回的結果不一樣,這個用處挺大的
Ⅵ php有多態性嗎
很早版本就支持了,看你是PHP什麼版本了。
我了解的,PHP5以後的版本是支持多態的。現在最新的都已經到PHP6版本了。
你可以從www.php100.com了解較多的最新進展。而且里邊有100集多的視頻教程。
Ⅶ 什麼是多態
多態首先是建立在繼承的基礎上的,先有繼承才能有多態。多態是指不同的子類在繼承父類後分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現出不同的形式。多態成立的另一個條件是在創建子類時候必須使用父類new子類的方式。
多態(Polymorphism)按字面的意思就是「多種狀態」。在面向對象語言中,介面的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作(摘自「Delphi4編程技術內幕」)。
簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態性在Object Pascal和C++中都是通過虛函數實現的。
拓展資料:
多態指同一個實體同時具有多種形式。它是面向對象程序設計(OOP)的一個重要特徵。如果一個語言只支持類而不支持多態,只能說明它是基於對象的,而不是面向對象的。C++中的多態性具體體現在運行和編譯兩個方面。運行時多態是動態多態,其具體引用的對象在運行時才能確定。編譯時多態是靜態多態,在編譯時就可以確定對象使用的形式。
多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。
C++中,實現多態有以下方法:虛函數,抽象類,覆蓋,模板(重載和多態無關)。
OC中的多態:不同對象對同一消息的不同響應.子類可以重寫父類的方法。
多態就是允許方法重名 參數或返回值可以是父類型傳入或返回。
多態也指生物學中腔腸動物的特殊的生活方式。水螅態與水母態的世代交替現象。
把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。
賦值之後,父類型的引用就可以根據當前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。
使用繼承性的結果就是當創建了一個類的家族,在認識這個類的家族時,就是把子類的對象當作基類的對象,這種認識又叫作upcasting(向上轉型)。這樣認識的重要性在於:我們可以只針對基類寫出一段程序,但它可以適應於這個類的家族,因為編譯器會自動找出合適的對象來執行操作。這種現象又稱為多態性。而實現多態性的手段又叫稱動態綁定(dynamic binding)。
簡單的說,建立一個父類對象的引用,它所指對象可以是這個父類的對象,也可以是它的子類的對象。java中當子類擁有和父類同樣的函數,當通過這個父類對象的引用調用這個函數的時候,調用到的是子類中的函數。