最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP入門教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類,抽象方法等)

 更新時(shí)間:2016年09月11日 16:22:40   作者:onestopweb  
這篇文章主要介紹了PHP入門教程之面向?qū)ο蟮奶匦?結(jié)合實(shí)例形式分析了php面向?qū)ο笏婕暗睦^承、多態(tài)、接口、抽象類及抽象方法等,需要的朋友可以參考下

本文實(shí)例講述了PHP面向?qū)ο蟮奶匦?。分享給大家供大家參考,具體如下:

Demo1.php

<?php
  header('Content-Type:text/html; charset=utf-8;');
  //創(chuàng)建一個(gè)電腦類
  class Computer {
    //什么叫做類內(nèi),就是創(chuàng)建類的花括號(hào)內(nèi)的范圍叫做類內(nèi),其他地方則類外。
    //public 是對(duì)字段的公有化,這個(gè)字段類外即可訪問,賦值和取值
    public $_name = '聯(lián)想';
  }
  $computer = new Computer();
  $computer -> _name = 'Dell';
  echo $computer->_name;
?>

Demo2.php

<?php
  header('Content-Type:text/html; charset=utf-8;');
  class Computer {
    //private 是私有化,即對(duì)字段進(jìn)行封裝的操作,類外無法訪問,取值和賦值都不能操作
    private $_name = '聯(lián)想';
  }
  $computer = new Computer();
  echo $computer->_name;
?>

Demo3.php

<?php
  header('Content-Type:text/html; charset=utf-8;');
  class Computer {
    private $_name = '聯(lián)想';
    //這個(gè)時(shí)候我采用一個(gè)公共對(duì)外的方法來訪問私有字段
    //因?yàn)樗接凶侄沃荒茉陬悆?nèi)訪問,而對(duì)外的公共方法是類內(nèi)的。
    //更而公共方法又是公共的,所以類外又可訪問。
    public function _run(){
      //字段在類內(nèi)調(diào)用的時(shí)候必須是類 -> 字段,而$_name只是一個(gè)普通變量而已。
      //字段在類外調(diào)用的方法是對(duì)象 -> 字段,而類內(nèi)就必須使用 Computer -> _name
      //但是在本類中,可以使用一個(gè)關(guān)鍵字來代替字來代替 Computer ,那就是 $this
      echo $this ->_name;
    }
  }
  $computer = new Computer();
  $computer -> _run();
?>

Demo4.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    private $name;
    private $model;
    private $cpu;
    private $keyboard;
    private $show;
    private $zb;
    //必須寫個(gè)對(duì)外的入口,才可以取到
    public function getName() {
      return $this->name;
    }
    //必須寫一個(gè)對(duì)內(nèi)的入口,對(duì)私有字段進(jìn)行賦值
    public function setName($name) {
      //這里的 $name 只是一個(gè)變量而已,參數(shù)而已
      //$this->name 才是類的字段
      $this->name = $name;
    }
  }
  $computer = new Computer ();
  echo $computer->getName();
  $computer->setName('Dell');
  echo $computer->getName();
?>

Demo5.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    private $_name;
    private $_model;
    private $_cpu;
    //當(dāng)類外的對(duì)象直接調(diào)用私有字段時(shí),會(huì)跟著去檢查是否有攔截器,
    //如果直接對(duì) $_name 進(jìn)行賦值,那么__set 方法就會(huì)攔截住,就不會(huì)報(bào)錯(cuò)了。
    //采用攔截器進(jìn)行賦值和取值
    //賦值
    private function __set($_key,$_value){
      //采用$_key = '_name',那么 $_value = '聯(lián)想';
      //$this ->_name = '聯(lián)想';
      $this ->$_key = $_value;
    }
    //取值
    private function __get($_key){
      return $this -> $_key;
      //如果 $_key = '_name' 那么 $this -> _name;
      //如果 $_key = '_cpu' 那么 $this -> _cpu;
      //如果 $_key = '_model' 那么 $this -> _model;
    }
  }
  $computer = new Computer ();
  $computer->_name = '聯(lián)想';
  $computer->_cpu = '四核';
  $computer->_model = 'i7';
  echo $computer->_name;
  echo $computer->_cpu;
  echo $computer->_model;
?>

Demo6.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    private $_name;
    private $_model;
    private $_cpu;
    //__set 和 __get 方法私有了,還是可以執(zhí)行,是因?yàn)?
    //因?yàn)槟壳俺绦虻闹羔樢呀?jīng)在類內(nèi)了。而類內(nèi)可以執(zhí)行封裝的方法
    //類內(nèi)執(zhí)行私有方法,不會(huì)出現(xiàn)任何錯(cuò)誤。
    //它只需要間接的攔截就可以了。攔截是在內(nèi)類執(zhí)行的。
    //說白了,__set() 和 __get() 是 PHP 內(nèi)置的方法,具有一定的特殊性
    private function __set($_key, $_value) {
      $this->$_key = $_value;
    }
    private function __get($_key) {
      return $this->$_key;
    }
  }
  $computer = new Computer ();
  $computer->_name = '聯(lián)想';
  $computer->_cpu = '四核';
  $computer->_model = 'i7';
  echo $computer->_name;
  echo $computer->_cpu;
  echo $computer->_model;
?>

Demo7.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    const NAME = 'DELL';
  }
  //常量的輸出方法 類::常量
  echo Computer::NAME;    //DELL
?>

Demo8.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    public $_count = 0;
    public function _add(){
      $this -> _count++;  //$_count = $_count+1 $_count++
    }
  }
  //做一個(gè)累計(jì)的效果
  $computer1 = new Computer();
  $computer1 ->_add();
  $computer1 ->_add();
  $computer1 ->_add();
  echo $computer1 -> _count;
  echo '<br />';
  $computer2 = new Computer();
  $computer2 ->_add();
  $computer2 ->_add();
  $computer2 ->_add();
  echo $computer2 -> _count;
?>

Demo9.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    public static $_count = 0;
    public function _add(){
      //如果是靜態(tài)成員字段,那么就應(yīng)該用 self 來調(diào)用,而不是 $this
      self::$_count++;
    }
  }
  //做一個(gè)累計(jì)的效果
  $computer1 = new Computer();
  $computer1 ->_add();
  echo Computer::$_count;
  $computer1 ->_add();
  echo Computer::$_count;
  $computer1 ->_add();
  echo Computer::$_count;
  echo '<br />';
  $computer2 = new Computer();
  $computer2 ->_add();
  echo Computer::$_count;
  $computer2 ->_add();
  echo Computer::$_count;
  $computer2 ->_add();
  echo Computer::$_count;
?>

Demo10.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    public static $_count = 0;
    public static function _add(){
      self::$_count++;
    }
  }
  Computer::_add();
  Computer::_add();
  Computer::_add();
  echo Computer::$_count;
?>

Demo11.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
  }
  $computer = new Computer();
  echo $computer instanceof Computer;
?>

Demo12.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  //這是父類,電腦類
  class Computer {
    public $_name = '聯(lián)想';
    public function _run(){
      echo '聯(lián)想在運(yùn)行!';
    }
  }
  //子類,筆記本電腦類
  class NoteComputer extends Computer {
  }
  $noteComputer = new NoteComputer();
  echo $noteComputer -> _name;
  $noteComputer -> _run();
?>

Demo13.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    public $_name = '聯(lián)想';
    public function _run(){
      echo '聯(lián)想在運(yùn)行!';
    }
  }
  class NoteComputer extends Computer {
    //我不需要父類的字段和方法,那么可以采用重寫的方法覆蓋掉父類的字段和方法
    public $_name = 'Dell';
    public function _run(){
      echo 'Dell在運(yùn)行!';
    }
  }
  $noteComputer = new NoteComputer();
  echo $noteComputer -> _name;
  $noteComputer -> _run();
?>

Demo14.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    //私有化,但是無法被子類繼承,這個(gè)時(shí)候就應(yīng)該用受保護(hù)的修飾符來封裝
    protected $_name = '聯(lián)想';
    protected function _run(){
      return '聯(lián)想在運(yùn)行!';
    }
  }
  class NoteComputer extends Computer {
    public function getTop() {
      echo $this->_name;
      echo $this->_run();
    }
  }
  $noteComputer = new NoteComputer();
  $noteComputer -> getTop();
?>

Demo15.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  class Computer {
    public $_name = '聯(lián)想';
    public function _run(){
      return '聯(lián)想在運(yùn)行!';
    }
  }
  class NoteComputer extends Computer {
    //我子類已經(jīng)覆蓋了父類的字段和方法,
    //但是我又要調(diào)用父類的字段和方法,那怎么辦呢?
    public $_name = 'Dell';
    public function _run(){
      echo 'Dell在運(yùn)行!';
      echo parent :: _run();
    }
  }
  $noteComputer = new NoteComputer();
  echo $noteComputer -> _name;
  $noteComputer -> _run();
  //DellDell在運(yùn)行!聯(lián)想在運(yùn)行!
?>

Demo16.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  //final 如果加在類前面,表示這個(gè)類不能被繼承
// final class Computer {
// }
  class Computer {
    //final 如果加在方法前面,表示不能夠重寫些方法
    final public function _run(){
    }
  }
  class NoteComputer extends Computer {
    public function _run(){
    }
  }
  $noteComputer = new NoteComputer();
?>

Demo17.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  //創(chuàng)建一個(gè)抽象類,只要在 class 前面加上 abstract 就是抽象類了
  //抽象類不能夠被實(shí)例化,就是創(chuàng)建對(duì)象
  //只在類里面有一個(gè)抽象方法,那么這個(gè)類必須是抽象類,類前面必須加上 abstract
  abstract class Computer {
    public $_name = '聯(lián)想';
    //抽象類里創(chuàng)建一個(gè)抽象方法
    //抽象方法不能夠?qū)崿F(xiàn)方法體的內(nèi)容
    abstract public function _run();
    //我在抽象類里能否創(chuàng)建一個(gè)普通方法
    public function _run2(){
      echo '我是父類的普通方法';
    }
  }
  //類不能夠?qū)崿F(xiàn)多繼承,只支持單繼承。
  //抽象類是給子類用來繼承的,實(shí)現(xiàn)一種規(guī)范和資源的共享
  class NoteComputer extends Computer {
    //抽象類的抽象方法,子類必須重寫,不然會(huì)報(bào)錯(cuò)。
    //抽象類里的普通方法不需要重寫,子類會(huì)直接繼承下來
    public function _run(){
      echo '我是子類的方法';
    }
  }
  $noteComputer = new NoteComputer();
  $noteComputer -> _run();
  $noteComputer -> _run2();
  echo $noteComputer -> _name;
?>

Demo18.php

<?php
  /*
   * 到底應(yīng)該用抽象類還是接口呢
   * 如果你要繼承多個(gè)接口的方法規(guī)范,那么就用接口好了。
   * 如果你要共享一個(gè)方法體內(nèi)容,那么就用抽象類。
   * */
  header ( 'Content-Type:text/html; charset=utf-8;' );
  //創(chuàng)建一個(gè)接口
  //接口也不能被實(shí)例化
  //接口是為了規(guī)范實(shí)現(xiàn)它的子類,以達(dá)到統(tǒng)一的目的。也可以共享數(shù)據(jù)
  interface Computer {
    //成員字段必須是變量
    const NAME = '成員 ';
    //接口里的所有方法都是抽象方法,不能夠?qū)懛椒w
    //并且接口的抽象方法不需要寫 abstract
    public function _run();
    public function _run2();
  }
  interface Computer2 {
    public function _run3();
  }
  //子類繼承接口的說法,叫做實(shí)現(xiàn),接口可以多實(shí)現(xiàn)
  class NoteComputer implements Computer,Computer2 {
    public function _run() {
      echo '我重寫了run';
    }
    public function _run3() {
      echo '我重寫了run3';
    }
    public function _run2() {
      echo '我重寫了run2';
    }
  }
  $noteComputer = new NoteComputer();
  $noteComputer -> _run();
  $noteComputer -> _run2();
  $noteComputer -> _run3();
  echo NoteComputer::NAME;
  //接口 :: 常量
  //echo Computer::NAME;
?>

Demo19.php

<?php
  header ( 'Content-Type:text/html; charset=utf-8;' );
  //什么叫做多態(tài),字面意思,多種形態(tài)
  //一個(gè)動(dòng)作由不同的人去執(zhí)行,而產(chǎn)生不同的效果或者效果,即為多態(tài)。
  //一個(gè)人通過不同的狀態(tài)去執(zhí)行同一種動(dòng)作,形成不同的效果,也可以稱作為多態(tài)。
  //園丁    剪    修理花草
  //理發(fā)師  剪    理發(fā)
  //總裁    剪    裁員
  //人   筆記本   運(yùn)行 win7開機(jī)了
  //人   臺(tái)式機(jī)   運(yùn)行 xp開機(jī)了
  //創(chuàng)建一個(gè)接口,來規(guī)范運(yùn)行的方法
  interface Computer {
    public function version(); //這個(gè)方法表示采用什么電腦
    public function work();   //這臺(tái)電腦是怎么運(yùn)行的
  }
  //創(chuàng)建一個(gè)筆記本的類實(shí)現(xiàn)接口
  class NoteComputer implements Computer {
    public function version() {
      echo '筆記本';
    }
    public function work() {
      echo '可以便攜式運(yùn)行 win7';
    }
  }
  //創(chuàng)建一個(gè)臺(tái)式機(jī)的類實(shí)現(xiàn)接口
  class DesktopComputer implements Computer {
    public function version() {
      echo '臺(tái)式機(jī)';
    }
    public function work() {
      echo '在工作站運(yùn)行 XP';
    }
  }
  //創(chuàng)建一個(gè)用戶
  class Person {
    //創(chuàng)建一個(gè)方法來接受電腦(筆記本電腦,也可以是臺(tái)式電腦)
    //怎么接受,將他們的對(duì)象傳進(jìn)來就 OK 啦。
    public function _run($type) {
      echo '這個(gè)人的';
      $type -> version();
      $type ->work();
    }
  }
  //多態(tài)的原理,就是類都寫好了,不要去修改它,只要在類外的調(diào)用參數(shù)的更改
  //而最后的結(jié)果也會(huì)得到更改,那么這個(gè)就是多態(tài)。
  //有一個(gè)接口,兩個(gè)類,一個(gè)是筆記本的類,一個(gè)是臺(tái)式機(jī)的類
  //創(chuàng)建了筆記本
  $noteComputer = new NoteComputer();
  //創(chuàng)建臺(tái)式機(jī)
  $desktopComputer = new DesktopComputer();
  //創(chuàng)建一個(gè)人
  $person = new Person();
  //使用電腦
  $person -> _run($noteComputer); //這種傳遞,叫做對(duì)象引用的傳遞
?>

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

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

相關(guān)文章

  • PHP中的cookie不用刷新就生效的方法

    PHP中的cookie不用刷新就生效的方法

    PHP的COOKIE在設(shè)定之后,必須要刷新一下網(wǎng)頁才能生效,至于是什么原因,有人說是為了安全考慮,至于你信不信,反正我信了
    2012-02-02
  • PHP IN_ARRAY 函數(shù)使用注意事項(xiàng)

    PHP IN_ARRAY 函數(shù)使用注意事項(xiàng)

    其實(shí)關(guān)鍵還是因?yàn)?php是弱類型語言,php進(jìn)行比較的時(shí)候 最好還是使用strict方法的。因?yàn)檫@樣不但比較兩者的值是否一直,還會(huì)比較兩者的類型是否一直。
    2010-07-07
  • 9個(gè)實(shí)用的PHP代碼片段分享

    9個(gè)實(shí)用的PHP代碼片段分享

    這篇文章主要介紹了9個(gè)實(shí)用的PHP代碼片段分享,本文講解了查看郵件是否已被閱讀、從網(wǎng)頁中提取關(guān)鍵詞、查找頁面上的所有鏈接、自動(dòng)轉(zhuǎn)換URL為可點(diǎn)擊超鏈接等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • PHP如何讀取由JavaScript設(shè)置的Cookie

    PHP如何讀取由JavaScript設(shè)置的Cookie

    本文主要介紹了PHP讀取由JavaScript設(shè)置的Cookie的方法。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • PHP實(shí)現(xiàn)的DES加密解密類定義與用法示例

    PHP實(shí)現(xiàn)的DES加密解密類定義與用法示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的DES加密解密類定義與用法,結(jié)合實(shí)例形式分析了基于php定義的DES加密解密類與具體使用方法,需要的朋友可以參考下
    2018-07-07
  • PHP 采集程序 常用函數(shù)

    PHP 采集程序 常用函數(shù)

    php中喜歡他的采集功能的朋友,就不的不參考下面的函數(shù)了,他們就是php采集程序中,常用的一些函數(shù)收集
    2008-12-12
  • PHP COOKIE及時(shí)生效的方法介紹

    PHP COOKIE及時(shí)生效的方法介紹

    本篇文章主要是對(duì)PHP中COOKIE及時(shí)生效的方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • PHP JS Ip地址及域名格式檢測代碼

    PHP JS Ip地址及域名格式檢測代碼

    這篇文章主要介紹了php與js中檢測ip地址及域名的函數(shù),方便大家在寫程序中檢測ip與域名,需要的朋友可以參考下
    2013-09-09
  • PHP遞歸調(diào)用的小技巧講解

    PHP遞歸調(diào)用的小技巧講解

    對(duì)于初學(xué)PHP語言的朋友來說,可能對(duì)PHP遞歸的用法還是比較陌生。我們今天就來講一下有關(guān)PHP遞歸調(diào)用實(shí)現(xiàn)多元數(shù)組替換功能
    2013-02-02
  • PHP數(shù)組array類常見操作示例

    PHP數(shù)組array類常見操作示例

    這篇文章主要介紹了PHP數(shù)組array類常見操作,結(jié)合實(shí)例形式分析了PHP數(shù)組array常見函數(shù)使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-05-05

最新評(píng)論

永清县| 阿瓦提县| 抚远县| 宿松县| 台北县| 桐庐县| 麦盖提县| 昌邑市| 宁陕县| 旌德县| 尖扎县| 舒城县| 临泉县| 桂平市| 图木舒克市| 惠水县| 西乌珠穆沁旗| 会东县| 萨迦县| 峨眉山市| 舒兰市| 安新县| 东乌珠穆沁旗| 金门县| 朝阳县| 左权县| 海门市| 石台县| 赞皇县| 牟定县| 小金县| 利津县| 永春县| 靖州| 华池县| 贺兰县| 汉寿县| 徐汇区| 措勤县| 江门市| 林口县|