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

Table of Contents
Table of Contents
Previous words
Packaging
Inheritance
多態(tài)
Home php教程 php手冊(cè) The three major features of the third part of the object-oriented series of front-end learning PHP

The three major features of the third part of the object-oriented series of front-end learning PHP

Nov 16, 2016 am 10:24 AM

×
Table of Contents
[1] Encapsulation [2] Inheritance [3] Polymorphism

Previous words

 The three major characteristics of PHP object-oriented programming are encapsulation, inheritance and polymorphism. This article will introduce these three major features of php

Packaging

 Encapsulation is to add access modifiers (public, protected or private) to member properties and member methods in an object, so as to hide the internal details of the object as much as possible to achieve better control of the members. Access control

 Class members defined as public can be accessed from anywhere. Class members defined as protected can be accessed by itself and its subclasses and parent classes. Class members defined as private can only be accessed by the class in which they are defined

 Class attributes must be defined as one of public, protected, and private. If defined with var, it is considered public

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

 Methods in a class can be defined as public, private or protected. If these keywords are not set, the method defaults to public

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

Inheritance

 Inheritance is a well-known programming feature, and PHP’s object model also uses inheritance. Inheritance will affect the relationship between classes and objects and objects

 When extending a class, the subclass will inherit all the public and protected methods of the parent class. Unless the subclass overrides the method of the parent class, the inherited method will retain its original function

 Inheritance is very useful for functional design and abstraction, and adding new functions to similar objects eliminates the need to rewrite these common functions

Class inheritance

 A class can inherit the methods and properties of another class using the extends keyword in the declaration. PHP does not support multiple inheritance, a class can only inherit one base class

 Inherited methods and properties can be overridden by redeclaring them with the same name. But if the parent class uses final when defining a method, the method cannot be overridden

 When overriding a method, the parameters must remain consistent otherwise PHP will issue an E_STRICT level error message. The exception is the constructor, which can use different parameters when overridden

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

 In the subclass, use parent to access the overridden properties and methods in the parent class

<?<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>=&ldquo;&rdquo;, <span style="color: #800080;">$sex</span>=<span style="color: #000000;">&ldquo;男&rdquo;) { }
        </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(); 

Abstract

 In object-oriented languages, a class can have one or more subclasses, and each class has at least one public method as an interface for external code to access it. Abstract methods are introduced to facilitate inheritance

  When there is a method in a class, it has no method body, that is, there are no curly braces, and it ends directly with a semicolon. We call this method an abstract method, and it must be defined using the keyword abstract

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">function</span> fun();

 The class containing this method must be an abstract class and must be declared using the keyword abstract

 Classes defined as abstract cannot be instantiated. Any class must be declared abstract if at least one method in it is declared abstract. A method defined as abstract only declares its calling method (parameters) and cannot define its specific function implementation

 The role of an abstract method is to stipulate that subclasses must have the implementation of this method. The function is handed over to the subclass, and only the structure is written, without specific implementation. The implementation is left to the specific subclass to implement according to its own function; the abstract class The function is to require the structure of the subclass, so the abstract class is a specification

When inheriting an abstract class, the subclass must define all abstract methods in the parent class; in addition, the access control of these methods must be the same (or more relaxed) as in the parent class. For example, if an abstract method is declared as protected, then the method implemented in the subclass should be declared as protected or public, and cannot be defined as private. In addition, the method calling methods must match, that is, the type and number of required parameters must be consistent. For example, if a subclass defines an optional parameter, but it is not included in the declaration of an abstract method of the parent class, there is no conflict between the two declarations

<?<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è)類只能繼承一個(gè)父類。為了解決這個(gè)這個(gè)問題,PHP引入了接口,接口的思想是指定了一個(gè)實(shí)現(xiàn)了該接口的類必須實(shí)現(xiàn)的一系列函數(shù)

  使用接口(interface),可以指定某個(gè)類必須實(shí)現(xiàn)哪些方法,但不需要定義這些方法的具體內(nèi)容。接口是通過(guò)interface關(guān)鍵字來(lái)定義的,就像定義一個(gè)標(biāo)準(zhǔn)的類一樣,但其中定義所有的方法都是空的

  接口中定義的所有方法都必須是公有,這是接口的特性。要實(shí)現(xiàn)一個(gè)接口,使用 implements 操作符。類中必須實(shí)現(xiàn)接口中定義的所有方法,否則會(huì)報(bào)一個(gè)致命錯(cuò)誤。類可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)來(lái)分隔多個(gè)接口的名稱。接口中也可以定義常量。接口常量和類常量的使用完全相同,但是不能被子類或子接口所覆蓋

<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ò)誤寫法,因?yàn)槌A坎荒鼙桓采w。接口常量的概念和類常量是一樣的。</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)性是指在父類中定義的屬性或行為被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在父類及其各個(gè)子類中具有不同的語(yǔ)義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同

單態(tài)

  說(shuō)到多態(tài),首先要提到單態(tài)設(shè)計(jì)模式,單態(tài)模式的主要作用是保證在面向?qū)ο缶幊淘O(shè)計(jì)中,一個(gè)類只能有一個(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)綁定的功能,也稱為“同名異式”,多態(tài)可以讓軟件在開發(fā)和維護(hù)時(shí),達(dá)到充分的延伸性

  在php中,多態(tài)性就是指方法的重寫,一個(gè)子類可中可以重新修改父類中的某些方法,使其具有自己的特征。重寫要求子類的方法和父類的方法名稱相同,這可以通過(guò)聲明抽象類或是接口來(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> "加載鍵盤成功!<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)行鍵盤成功!<br>"<span style="color: #000000;">;
        }
        </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> stop() {
            </span><span style="color: #0000ff;">echo</span> "停止鍵盤使用!<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>?>
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)