欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP抽象類和接口用法實(shí)例詳解

 更新時(shí)間:2019年07月20日 07:48:48   作者:Sams-ara  
這篇文章主要介紹了PHP抽象類和接口用法,結(jié)合實(shí)例形式詳細(xì)分析了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中抽象類與接口的相關(guān)概念、原理、區(qū)別及使用技巧,需要的朋友可以參考下

本文實(shí)例講述了PHP抽象類和接口用法。分享給大家供大家參考,具體如下:

前言

對(duì)于oop,估計(jì)大多數(shù)人并不陌生。有些人除PHP外也學(xué)習(xí)不少其他語(yǔ)言,會(huì)發(fā)現(xiàn)php的不同之處,可能語(yǔ)法極其丑陋,但并不妨礙它成為世界上最好的語(yǔ)言(邪教語(yǔ)言)。PHP可以允許常量作為接口的一部分,而對(duì)于抽象的理解十分重要。

計(jì)算機(jī)上,對(duì)抽象的理解與自然語(yǔ)言中我們每天使用的抽象概念有所不同。比如,我們指代‘狗'、‘貓'等動(dòng)物,我們會(huì)說(shuō)‘那只狗/貓',他們就是具有狗/貓這類特征的具體實(shí)例。但是我們不能把貓和狗看作一類,也就是說(shuō)你不能說(shuō)狗是貓,我們可以把狗和貓都定義到動(dòng)物這一類。所以我們把抽象定義為一個(gè)對(duì)象的基本特征,使他與其他對(duì)象明確區(qū)分開(kāi)。

抽象類

抽象類里面可以有非抽象方法。但接口里只能有抽象方法。 聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽像類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽像類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽像方法提供實(shí)現(xiàn),否則它們也是抽像類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。

先看一個(gè)普通類:

<?php
class appletree{
  privated $catch;
  piblic function tree($sweet){
    $this->catch=$sweet;
    return $this->catch;
  }
$apple=new appletree();
$eat=$apple->tree('this apple is sweet');
echo $eat;
?>

再看一個(gè)抽象類:

//appletree.php:
<?php
abstract class appletree{
  privated $catch;
  abstract public function tree1($sweet);
  public function tree2(){
    echo'smell';
  }
  public function _construct(){
    //......
    }
}
?>

<?php
include_once('appletree.php');
class anothertree extends appletree{
  public function tree1($sweet){
    $this->catch='this apple is';
    return $this->catch.$sweet;
    }
  }
$apple=new appletree();
echo $apple->tree1('sweet');
?>

從普通類和抽象類可以看出:

抽象類和抽象方法前面定義必須有abstract,調(diào)用為extends。抽象類中可以有具體方法,并且具體方法可以在抽象類中實(shí)例化,然而抽象方法不可以在抽象類中實(shí)例化。

接口

oop模式中接口也是比不可少的一部分,接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)像上調(diào)用接口的方法。由于有抽像類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口。

具體例子如下:

//fruit.php

<?php
interface fruit{
  public function apple($sweet);
  public function orange();
  }
?>

<?php
include_once('fruit.php');
class fruittree implements fruit{
  privated $catch;
  public function apple($sweet){
    $this->catch='this fruit is';
    rerurn $this->catch.$sweet;
    }
  public function orange(){
    return 'this orange is sweet';
    }
  }
$tree=new fruittree();
echo $tree->apple('sweet');
echo $tree->orange();
?>

接口和常量

一個(gè)網(wǎng)上看到的例子:(接口名和常量之間要用間隔符‘::'隔開(kāi),接口中可以用靜態(tài)常量,變量不可以)

<?php
interface TestInterface
{
  const CONSTVAR = 'aaa';
  static staticvar = 111;
  public function alert($str);
}
class TestClass implements TestInterface
{
  const CONSTVAR = 'bbb';
  public function __CONSTRUCT()
  {
    echo TestInterface::CONSTVAR;
  }
  public function alert($str)
  {
    echo $str;
  }
  public function __DESTRUCT()
  {
  }
}
$test1 = new TestClass();
?>

我們可以看出接口和抽象類的區(qū)別:

1、接口中沒(méi)有具體方法,都是抽象方法。
2、接口調(diào)用是implements,抽象類是extends。
3、接口中不可以聲明成員變量(包括類靜態(tài)變量),但是可以聲明類常量。抽象類中可以聲明各種類型成員變量,實(shí)現(xiàn)數(shù)據(jù)的封裝。
4、接口沒(méi)有構(gòu)造函數(shù),抽象類可以有構(gòu)造函數(shù)。
5、接口中的方法默認(rèn)都是public類型的,而抽象類中的方法可以使用private,protected,public來(lái)修飾。
6、一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承于一個(gè)抽象類。

使用選擇

如果要?jiǎng)?chuàng)建一個(gè)模型,這個(gè)模型將由一些緊密相關(guān)的對(duì)象采用,就可以使用抽象類。如果要?jiǎng)?chuàng)建將由一些不相關(guān)對(duì)象采用的功能,就使用接口。

如果必須從多個(gè)來(lái)源繼承行為,就使用接口。

如果知道所有類都會(huì)共享一個(gè)公共的行為實(shí)現(xiàn),就使用抽象類,并在其中實(shí)現(xiàn)該行為。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論