???? ????? ?? PHP ??? ? ?? ??? ? ?? ?? ??
Nov 16, 2016 am 10:24 AM?? ??
PHP ???? ?????? ? ?? ?? ??? ???, ?? ? ??????. ? ????? PHP? ? ?? ?? ??? ?????
???
???? ??? ?? ??? ?? ???? ??? ???(public(public), protected(protected) ?? private(private))? ???? ??? ?? ?? ??? ??? ??? ????. ?? ?? ?? ??? ???? ??
public?? ??? ??? ??? ????? ???? ? ????. protected? ??? ??? ??? ?? ???? ?? ?? ??? ? ?? ????? ???? ? ????. private?? ??? ??? ??? ??? ??? ?????? ??? ? ????.
??? ??? ??, ??, ??? ? ??? ????? ???. var? ???? ??? ?????
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass { </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$public</span> = 'Public'<span style="color: #000000;">; </span><span style="color: #0000ff;">protected</span> <span style="color: #800080;">$protected</span> = 'Protected'<span style="color: #000000;">; </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$private</span> = 'Private'<span style="color: #000000;">; </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> printHello() { </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #0000ff;">public</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #0000ff;">protected</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #0000ff;">private</span><span style="color: #000000;">; } } </span><span style="color: #800080;">$obj</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass(); </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$obj</span>-><span style="color: #0000ff;">public</span>; <span style="color: #008000;">//</span><span style="color: #008000;"> 這行能被正常執(zhí)行</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$obj</span>-><span style="color: #0000ff;">protected</span>; <span style="color: #008000;">//</span><span style="color: #008000;"> 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$obj</span>-><span style="color: #0000ff;">private</span>; <span style="color: #008000;">//</span><span style="color: #008000;"> 這行也會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤</span> <span style="color: #800080;">$obj</span>->printHello(); <span style="color: #008000;">//</span><span style="color: #008000;"> 輸出 Public、Protected 和 Private</span> <span style="color: #0000ff;">class</span> MyClass2 <span style="color: #0000ff;">extends</span><span style="color: #000000;"> MyClass { </span><span style="color: #008000;">//</span><span style="color: #008000;"> 可以對(duì) public 和 protected 進(jìn)行重定義,但 private 而不能</span> <span style="color: #0000ff;">protected</span> <span style="color: #800080;">$protected</span> = 'Protected2'<span style="color: #000000;">; </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> printHello() { </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #0000ff;">public</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #0000ff;">protected</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #0000ff;">private</span><span style="color: #000000;">; } } </span><span style="color: #800080;">$obj2</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass2(); </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$obj2</span>-><span style="color: #0000ff;">public</span>; <span style="color: #008000;">//</span><span style="color: #008000;"> 這行能被正常執(zhí)行</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$obj2</span>-><span style="color: #0000ff;">private</span>; <span style="color: #008000;">//</span><span style="color: #008000;"> 未定義 private</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$obj2</span>-><span style="color: #0000ff;">protected</span>; <span style="color: #008000;">//</span><span style="color: #008000;"> 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤</span> <span style="color: #800080;">$obj2</span>->printHello(); <span style="color: #008000;">//</span><span style="color: #008000;"> 輸出 Public、Protected2 和 Undefined</span> ?>
???? ???? ??, ??? ?? ??? ??? ? ????. ??? ???? ???? ?? ?? ???? ????? ??
? ?????.<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> __construct() { } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> MyPublic() { } </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> MyProtected() { } </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> MyPrivate() { } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> Foo() { </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">MyPublic(); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">MyProtected(); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">MyPrivate(); } } </span><span style="color: #800080;">$myclass</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass; </span><span style="color: #800080;">$myclass</span>->MyPublic(); <span style="color: #008000;">//</span><span style="color: #008000;"> 這行能被正常執(zhí)行</span> <span style="color: #800080;">$myclass</span>->MyProtected(); <span style="color: #008000;">//</span><span style="color: #008000;"> 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤</span> <span style="color: #800080;">$myclass</span>->MyPrivate(); <span style="color: #008000;">//</span><span style="color: #008000;"> 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤</span> <span style="color: #800080;">$myclass</span>->Foo(); <span style="color: #008000;">//</span><span style="color: #008000;"> 公有,受保護(hù),私有都可以執(zhí)行</span> <span style="color: #0000ff;">class</span> MyClass2 <span style="color: #0000ff;">extends</span><span style="color: #000000;"> MyClass { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> Foo2() { </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">MyPublic(); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">MyProtected(); </span><span style="color: #800080;">$this</span>->MyPrivate(); <span style="color: #008000;">//</span><span style="color: #008000;"> 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤</span> <span style="color: #000000;"> } } </span><span style="color: #800080;">$myclass2</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass2; </span><span style="color: #800080;">$myclass2</span>->MyPublic(); <span style="color: #008000;">//</span><span style="color: #008000;"> 這行能被正常執(zhí)行</span> <span style="color: #800080;">$myclass2</span>->Foo2(); <span style="color: #008000;">//</span><span style="color: #008000;"> 公有的和受保護(hù)的都可執(zhí)行,但私有的不行</span> ?>
??
??? ? ??? ????? ????, PHP? ?? ??? ??? ?????. ??? ???? ?? ? ?? ?? ??? ??? ????
???? ???? ?? ???? ?? ???? ?? ?? ? ?? ???? ??????. ?? ???? ?? ???? ???? ????? ?? ? ??? ???? ?? ??? ?????.
??? ??? ???? ???? ?? ???? ??? ??? ??? ??? ???? ??? ?? ??? ?? ??? ??? ????.
??? ??
???? ??? ?? ???? ???? ?? ???? ???? ??? ???? ? ????. PHP? ?? ??? ???? ????. ???? ??? ?? ???? ??? ? ????
??? ???? ??? ??? ???? ?? ???? ???? ? ????. ??? ?? ???? ??? ?? ? final? ???? ?? ???? ???? ? ????
???? ???? ? ????? ???? ??? ???. ??? ??? PHP? E_STRICT ?? ?? ???? ?????. ?, ???? ??? ? ?? ????? ??? ? ????.
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> foo { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> printItem(<span style="color: #800080;">$string</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">echo</span> 'Foo: ' . <span style="color: #800080;">$string</span> . <span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> printPHP() { </span><span style="color: #0000ff;">echo</span> 'PHP is great.' . <span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> bar <span style="color: #0000ff;">extends</span><span style="color: #000000;"> foo { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> printItem(<span style="color: #800080;">$string</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">echo</span> 'Bar: ' . <span style="color: #800080;">$string</span> . <span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; } } </span><span style="color: #800080;">$foo</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> foo(); </span><span style="color: #800080;">$bar</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> bar(); </span><span style="color: #800080;">$foo</span>->printItem('baz'); <span style="color: #008000;">//</span><span style="color: #008000;"> Output: 'Foo: baz'</span> <span style="color: #800080;">$foo</span>->printPHP(); <span style="color: #008000;">//</span><span style="color: #008000;"> Output: 'PHP is great' </span> <span style="color: #800080;">$bar</span>->printItem('baz'); <span style="color: #008000;">//</span><span style="color: #008000;"> Output: 'Bar: baz'</span> <span style="color: #800080;">$bar</span>->printPHP(); <span style="color: #008000;">//</span><span style="color: #008000;"> Output: 'PHP is great'</span> ?>
?? ????? parent? ???? ?? ???? ???? ??? ???? ??????.
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Person { </span><span style="color: #0000ff;">protected</span> <span style="color: #800080;">$name</span><span style="color: #000000;">; </span><span style="color: #0000ff;">protected</span> <span style="color: #800080;">$sex</span><span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$name</span>=“”, <span style="color: #800080;">$sex</span>=<span style="color: #000000;">“男”) { } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> say(){} } </span><span style="color: #0000ff;">class</span> Student <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Person { </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$school</span><span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$name</span>="", <span style="color: #800080;">$sex</span>="男", <span style="color: #800080;">$school</span>=""<span style="color: #000000;">) { parent</span>::__construct(<span style="color: #800080;">$name</span>,<span style="color: #800080;">$sex</span><span style="color: #000000;">); </span><span style="color: #800080;">$this</span>->school = <span style="color: #800080;">$school</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> say( ) { parent</span>::<span style="color: #000000;">say(); </span><span style="color: #0000ff;">echo</span> "在".<span style="color: #800080;">$this</span>->school."學(xué)校上學(xué)<br>"<span style="color: #000000;">; } } </span><span style="color: #800080;">$student</span> = <span style="color: #0000ff;">new</span> Student("張三","男",20, "edu"<span style="color: #000000;">); </span><span style="color: #800080;">$student</span>->say();
??
?? ?? ???? ???? ?? ??? ?? ???? ?? ? ???, ? ????? ?? ??? ????? ?? ?????? ?? ??? ?? ???? ????. ??? ???? ?? ?? ?? ???? ???????
???? ???? ?? ?? ??? ??? ????. ?, ???? ??? ?? ?????? ????. ? ???? ?? ????? ??, ??? ???? ???? ???. ??? ??
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">function</span> fun();
? ???? ???? ???? ?? ????? ?? abstract ???? ???? ???? ???
abstract? ??? ???? ?????? ? ????. ??? ??? ???? ???? ??? ?? ?? ???? ???? ????? ???. abstract? ??? ???? ?? ???(????)? ???? ?? ?? ??? ??? ? ????.
?? ???? ??? ?????? ? ???? ???? ?? ???? ????. ??? ?????? ????, ?? ??? ?? ??? ?????. ?? ??? ?? ?????. ?? ???? ??? ?? ???? ??? ????? ?? ???? ?????.
?? ???? ??? ? ?? ???? ?? ???? ?? ?? ???? ???? ??, ??? ???? ??? ??? ?? ???? ?? ????? ? ????? ???. ?? ?? ?? ???? protected? ??? ?? ?? ???? ??? ???? protected ?? public?? ????? ?? private?? ??? ? ????. ?? ???? ???? ???? ???? ???. ?, ?? ????? ??? ??? ????? ???. ?? ?? ?? ???? ??? ?? ??? ????? ?? ???? ?? ??? ??? ???? ?? ?? ? ?? ??? ??? ????
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Person { </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$name</span><span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$age</span><span style="color: #000000;">; </span><span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> say(); </span><span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> eat(); </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> run() { </span><span style="color: #0000ff;">echo</span> "11111111111111<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span> <span style="color: #008080;">sleep</span><span style="color: #000000;">() { </span><span style="color: #0000ff;">echo</span> "2222222222222222<br>"<span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> StudentCn <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Person { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> say() { </span><span style="color: #0000ff;">echo</span> "中文<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> eat() { </span><span style="color: #0000ff;">echo</span> "筷子"<span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> StudentEn <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Person { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> say() { </span><span style="color: #0000ff;">echo</span> "english<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> eat() { </span><span style="color: #0000ff;">echo</span> "刀叉"<span style="color: #000000;">; } } </span><span style="color: #800080;">$s1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> StudentEn(); </span><span style="color: #800080;">$s1</span> -> say();<span style="color: #008000;">//</span><span style="color: #008000;">english</span> <span style="color: #800080;">$s1</span> -> eat();<span style="color: #008000;">//</span><span style="color: #008000;">刀叉</span> ?>
接口
PHP與大多數(shù)面向?qū)ο缶幊陶Z(yǔ)言一樣,不支持多重繼承,也就是說(shuō)每個(gè)類(lèi)只能繼承一個(gè)父類(lèi)。為了解決這個(gè)這個(gè)問(wèn)題,PHP引入了接口,接口的思想是指定了一個(gè)實(shí)現(xiàn)了該接口的類(lèi)必須實(shí)現(xiàn)的一系列函數(shù)
使用接口(interface),可以指定某個(gè)類(lèi)必須實(shí)現(xiàn)哪些方法,但不需要定義這些方法的具體內(nèi)容。接口是通過(guò)interface關(guān)鍵字來(lái)定義的,就像定義一個(gè)標(biāo)準(zhǔn)的類(lèi)一樣,但其中定義所有的方法都是空的
接口中定義的所有方法都必須是公有,這是接口的特性。要實(shí)現(xiàn)一個(gè)接口,使用 implements 操作符。類(lèi)中必須實(shí)現(xiàn)接口中定義的所有方法,否則會(huì)報(bào)一個(gè)致命錯(cuò)誤。類(lèi)可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)來(lái)分隔多個(gè)接口的名稱(chēng)。接口中也可以定義常量。接口常量和類(lèi)常量的使用完全相同,但是不能被子類(lèi)或子接口所覆蓋
<span style="color: #008000;">//</span><span style="color: #008000;">實(shí)現(xiàn)一個(gè)接口</span> <?<span style="color: #000000;">php </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> iTemplate { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> setVariable(<span style="color: #800080;">$name</span>, <span style="color: #800080;">$var</span><span style="color: #000000;">); </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> getHtml(<span style="color: #800080;">$template</span><span style="color: #000000;">); } </span><span style="color: #0000ff;">class</span> Template <span style="color: #0000ff;">implements</span><span style="color: #000000;"> iTemplate { </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$vars</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">(); </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> setVariable(<span style="color: #800080;">$name</span>, <span style="color: #800080;">$var</span><span style="color: #000000;">) { </span><span style="color: #800080;">$this</span>->vars[<span style="color: #800080;">$name</span>] = <span style="color: #800080;">$var</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> getHtml(<span style="color: #800080;">$template</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">foreach</span>(<span style="color: #800080;">$this</span>->vars <span style="color: #0000ff;">as</span> <span style="color: #800080;">$name</span> => <span style="color: #800080;">$value</span><span style="color: #000000;">) { </span><span style="color: #800080;">$template</span> = <span style="color: #008080;">str_replace</span>('{' . <span style="color: #800080;">$name</span> . '}', <span style="color: #800080;">$value</span>, <span style="color: #800080;">$template</span><span style="color: #000000;">); } </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$template</span><span style="color: #000000;">; } } </span>?>
<span style="color: #008000;">//</span><span style="color: #008000;">常量不能被覆蓋</span> <?<span style="color: #000000;">php </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> a { </span><span style="color: #0000ff;">const</span> b = 'Interface constant'<span style="color: #000000;">; } </span><span style="color: #0000ff;">echo</span> a::<span style="color: #000000;">b; </span><span style="color: #008000;">//</span><span style="color: #008000;"> 錯(cuò)誤寫(xiě)法,因?yàn)槌A坎荒鼙桓采w。接口常量的概念和類(lèi)常量是一樣的。</span> <span style="color: #0000ff;">class</span> b <span style="color: #0000ff;">implements</span><span style="color: #000000;"> a { </span><span style="color: #0000ff;">const</span> b = 'Class constant'<span style="color: #000000;">; } </span>?>
<span style="color: #008000;">//</span><span style="color: #008000;">繼承多個(gè)接口</span> <?<span style="color: #000000;">php </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> a { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> foo(); } </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> b { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> bar(); } </span><span style="color: #0000ff;">interface</span> c <span style="color: #0000ff;">extends</span> a,<span style="color: #000000;"> b { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> baz(); } </span>?>
?
多態(tài)
對(duì)象的多態(tài)性是指在父類(lèi)中定義的屬性或行為被子類(lèi)繼承之后,可以具有不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在父類(lèi)及其各個(gè)子類(lèi)中具有不同的語(yǔ)義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類(lèi),其"繪圖"方法功能不同
單態(tài)
說(shuō)到多態(tài),首先要提到單態(tài)設(shè)計(jì)模式,單態(tài)模式的主要作用是保證在面向?qū)ο缶幊淘O(shè)計(jì)中,一個(gè)類(lèi)只能有一個(gè)實(shí)例對(duì)象存在
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> DB { </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$obj</span> = <span style="color: #0000ff;">null</span><span style="color: #000000;">; </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> __construct() { </span><span style="color: #0000ff;">echo</span> "連接數(shù)據(jù)庫(kù)成功<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> getInstance() { </span><span style="color: #0000ff;">if</span>(<span style="color: #008080;">is_null</span>(self::<span style="color: #800080;">$obj</span><span style="color: #000000;">)) self</span>::<span style="color: #800080;">$obj</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> self(); </span><span style="color: #0000ff;">return</span> self::<span style="color: #800080;">$obj</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> query(<span style="color: #800080;">$sql</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$sql</span><span style="color: #000000;">; } } </span><span style="color: #800080;">$db</span> = DB::<span style="color: #000000;">getInstance(); </span><span style="color: #800080;">$db</span> -> query("select * from user"<span style="color: #000000;">); </span>?>
多態(tài)展現(xiàn)了動(dòng)態(tài)綁定的功能,也稱(chēng)為“同名異式”,多態(tài)可以讓軟件在開(kāi)發(fā)和維護(hù)時(shí),達(dá)到充分的延伸性
在php中,多態(tài)性就是指方法的重寫(xiě),一個(gè)子類(lèi)可中可以重新修改父類(lèi)中的某些方法,使其具有自己的特征。重寫(xiě)要求子類(lèi)的方法和父類(lèi)的方法名稱(chēng)相同,這可以通過(guò)聲明抽象類(lèi)或是接口來(lái)規(guī)范
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> USB { </span><span style="color: #0000ff;">const</span> WIDTH = 12<span style="color: #000000;">; </span><span style="color: #0000ff;">const</span> HEIGHT = 3<span style="color: #000000;">; </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> load(); </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> run(); </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> stop(); } </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Cumputer { </span><span style="color: #0000ff;">function</span> useUSB(USB <span style="color: #800080;">$usb</span><span style="color: #000000;">) { </span><span style="color: #800080;">$usb</span> -><span style="color: #000000;"> load(); </span><span style="color: #800080;">$usb</span> -><span style="color: #000000;"> run(); </span><span style="color: #800080;">$usb</span> -><span style="color: #000000;"> stop(); } } </span><span style="color: #0000ff;">class</span> Mouse <span style="color: #0000ff;">implements</span><span style="color: #000000;"> USB{ </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> load() { </span><span style="color: #0000ff;">echo</span> "加載鼠標(biāo)成功!<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> run() { </span><span style="color: #0000ff;">echo</span> "運(yùn)行鼠標(biāo)功能!<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> stop() { </span><span style="color: #0000ff;">echo</span> "鼠標(biāo)工作結(jié)束!<br>"<span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span> KeyPress <span style="color: #0000ff;">implements</span><span style="color: #000000;"> USB { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> load() { </span><span style="color: #0000ff;">echo</span> "加載鍵盤(pán)成功!<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> run() { </span><span style="color: #0000ff;">echo</span> "運(yùn)行鍵盤(pán)成功!<br>"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> stop() { </span><span style="color: #0000ff;">echo</span> "停止鍵盤(pán)使用!<br>"<span style="color: #000000;">; } } </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Worker { </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> work() { </span><span style="color: #800080;">$c</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Cumputer(); </span><span style="color: #800080;">$m</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Mouse; </span><span style="color: #800080;">$k</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> KeyPress; </span><span style="color: #800080;">$c</span>->useUSB(<span style="color: #800080;">$k</span><span style="color: #000000;">); </span><span style="color: #800080;">$c</span>->useUSB(<span style="color: #800080;">$m</span><span style="color: #000000;">); } } </span><span style="color: #800080;">$w</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Worker; </span><span style="color: #800080;">$w</span> -><span style="color: #000000;"> work(); </span>?>

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)