您現在的位置是:電腦技術吧?>? 編程技術 ??>??接口標準,什么是接口??>??正文詳情

接口標準,什么是接口

陰安然2019-12-12 19:02:12 人圍觀
簡介usba型接口本文主要介紹了phpspl標準庫的接口細節。本文介紹了Coutable接口、outiterator接口、遞歸迭代器接口、seebable迭代器接口、splobsngff接口

這篇文章主要介紹了PHP SPL標準庫之接口(Interface)詳解,本文分別講解了Coutable接口、OuterIterator接口、RecursiveIterator接口、SeekableIterator接口、SplObserver和SplSubject接口等內容,需要的朋友可以參考下  PHP SPL標準庫總共有6個接口,如下:  1.Countable  2.OuterIterator  3.RecursiveIterator  4.SeekableIterator  5.SplObserver  6.SplSubject  其中OuterIterator、RecursiveIterator、SeekableIterator都是繼承Iterator類的,下面會對每種接口作用和使用進行詳細說明。

  Coutable接口:  實現Countable接口的對象可用于count()函數計數。

  代碼如下:  class Mycount implements Countable  {  public function count()  {  static $count = 0;  $count ;  return $count;  }  }  $count = new Mycount();  $count-count();  $count-count();  echo count($count); //3  echo count($count); //4  說明:  調用count()函數時,Mycount::count()方法被調用  count()函數的第二個參數將不會產生影響  OuterIterator接口:  自定義或修改迭代過程。

   代碼如下:  //IteratorIterator是OuterIterator的一個實現類  class MyOuterIterator extends IteratorIterator {  public function current()  {  return parent::current() . 'TEST';  }  }  foreach(new MyOuterIterator(new ArrayIterator(['b','a','c'])) as $key = $value) {  echo $key-$value.PHP_EOL;  }  /*  結果:  0-bTEST  1-aTEST  2-cTEST  */  在實際運用中,OuterIterator極其有用:   代碼如下:  $db = new PDO('mysql:host=localhost;dbname=test', 'root', 'mckee');  $db-query('set names utf8');  $pdoStatement = $db-query('SELECT * FROM test1', PDO::FETCH_ASSOC);  $iterator = new IteratorIterator($pdoStatement);  $tenRecordArray = iterator_to_array($iterator);  print_r($tenRecordArray);  RecursiveIterator接口:  用于循環迭代多層結構的數據,RecursiveIterator另外提供了兩個方法:  RecursiveIterator::getChildren 獲取當前元素下子迭代器  RecursiveIterator::hasChildren 判斷當前元素下是否有迭代器  代碼如下:  class MyRecursiveIterator implements RecursiveIterator  {  private $_data;  private $_position = 0;  public function __construct(array $data) {  $this-_data = $data;  }  public function valid() {  return isset($this-_data[$this-_position]);  }  public function hasChildren() {  return is_array($this-_data[$this-_position]);  }  public function next() {  $this-_position ;  }  public function current() {  return $this-_data[$this-_position];  }  public function getChildren() {  print_r($this-_data[$this-_position]);  }  public function rewind() {  $this-_position = 0;  }  public function key() {  return $this-_position;  }  }  $arr = array(0, 1= array(10, 20), 2, 3 = array(1, 2));  $mri = new MyRecursiveIterator($arr);  foreach ($mri as $c = $v) {  if ($mri-hasChildren()) {  echo $c has children: .PHP_EOL;  $mri-getChildren();  } else {  echo $v .PHP_EOL;  }  }  /*  結果:  0  1 has children:  Array  (  [0] = 10  [1] = 20  )  2  3 has children:  Array  (  [0] = 1  [1] = 2  )  */  SeekableIterator接口:  通過seek()方法實現可搜索的迭代器,用于搜索某個位置下的元素。

   代碼如下:  class MySeekableIterator implements SeekableIterator {  private $position = 0;  private $array = array(  first element ,  second element ,  third element ,  fourth element  );  public function seek ( $position ) {  if (!isset( $this - array [ $position ])) {  throw new OutOfBoundsException ( invalid seek position ( $position ) );  }  $this - position = $position ;  }  public function rewind () {  $this - position = 0 ;  }  public function current () {  return $this - array [ $this - position ];  }  public function key () {  return $this - position ;  }  public function next () {   $this - position ;  }  public function valid () {  return isset( $this - array [ $this - position ]);  }  }  try {  $it = new MySeekableIterator ;  echo $it - current (), n ;  $it - seek ( 2 );  echo $it - current (), n ;  $it - seek ( 1 );  echo $it - current (), n ;  $it - seek ( 10 );  } catch ( OutOfBoundsException $e ) {  echo $e - getMessage ();  }  /*  結果:  first element  third element  second element  invalid seek position ( 10 )  */  SplObserver和SplSubject接口:  SplObserver和SplSubject接口用來實現觀察者設計模式,觀察者設計模式是指當一個類的狀態發生變化時,依賴它的對象都會收到通知并更新。

使用場景非常廣泛,比如說當一個事件發生后,需要更新多個邏輯操作,傳統方式是在事件添加后編寫邏輯,這種代碼耦合并難以維護,觀察者模式可實現低耦合的通知和更新機制。

  看看SplObserver和SplSubject的接口結構:   代碼如下:  //SplSubject結構 被觀察的對象  interface SplSubject{  public function attach(SplObserver $observer); //添加觀察者  public function detach(SplObserver $observer); //剔除觀察者  public function notify(); //通知觀察者  }  //SplObserver結構 代表觀察者  interface SplObserver{  public function update(SplSubject $subject); //更新操作  }  看下面一個實現觀察者的例子:  復制代碼 代碼如下:  class Subject implements SplSubject  {  private $observers = array();  public function attach(SplObserver $observer)  {  $this-observers[] = $observer;  }  public function detach(SplObserver $observer)  {  if($index = array_search($observer, $this-observers, true)) {  unset($this-observers[$index]);  }  }  public function notify()  {  foreach($this-observers as $observer) {  $observer-update($this);  }  }  }  class Observer1 implements SplObserver  {  public function update(SplSubject $subject)  {  echo 邏輯1代碼.PHP_EOL;  }  }  class Observer2 implements SplObserver  {  public function update(SplSubject $subject)  {  echo 邏輯2代碼.PHP_EOL;  }  }  $subject = new Subject();  $subject-attach(new Observer1());  $subject-attach(new Observer2());  $subject-notify();  /*  結果:  邏輯1代碼  邏輯2代碼  */

版權聲明:本文由 陰安然 整理編輯。

原標題:m.2接口有幾種,接口規范

轉載注明出處:http://www.dn9ww09s.icu/program/15370.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 顯示適配器代碼43,什么是適配器模式

    顯示適配器代碼43,什么是適配器模式 相關圖片適配器認證本文主要介紹PHP設計模式的適配器模式代碼示例。本文闡述了目標、角色、應用場景、優點等內容,并給出了代碼示例。需要的朋友可以參考以下目標:可以將一個類的接口...

  • java split函數,split函數分割

    java split函數,split函數分割 相關圖片vba split函數用法%STR1應該處理哪些字符?讓我們看一個字符:item u tempcontent=split(sp'u tempcontent,)/})(0)這里是vb split函數用法...

  • flash與ae能結合,PS和flash結合

    flash與ae能結合,PS和flash結合 相關圖片ps做flashflash LoadVars函數加載ASP頁面,將變量傳遞給頁面,首先讀取記錄,然后加載更新頁面。例如,update.asp?用戶名=?pass=?dim sops flash...

  • 用流,免流如何使用

    用流,免流如何使用 相關圖片幽諾每次使用后全流出來本文主要介紹PHP流的詳細介紹和使用。phpstream是一個內置的核心操作,普通開發人員很少使用它。它用于統一文件、網絡、數據壓縮等類文件操作,并為這些類...

  • kafkastream函數,stringstream的用法

    kafkastream函數,stringstream的用法 相關圖片stream groupby本文主要介紹PHP stream﹣context﹣create()函數的使用示例。Stream﹣context﹣create()函數用于創建打開文件的上下文件選stringstream頭文件...

  • c 字符串長度,字符串長度怎么數

    c  字符串長度,字符串長度怎么數 相關圖片字符串比較大小SP judge中西方混合字符串的長度==================函數名:string length action:judge string lengtjava字符串長度...

  • php7,php實例

    php7,php實例 相關圖片php socket本文通過一個實例說明PHP如何自動地改變每天的隨機問候語。與您分享以供參考。具體分析如下:這里預先定義了一個PHP數組,其中存儲了一些隨機的問候語。打電話時,它php消...

  • asp制作網站,asp制作網站教程

    asp制作網站,asp制作網站教程 相關圖片做網頁用asp純ASP創建的日歷程序,可以美化自己,這里只提供最簡單的CSS樣式。。。樣式體{字體大小:12px;邊距:20px 0 0 20px;填充:0}tr,td{文本asp編寫工具...

  • deleteinsert,update和insert

    deleteinsert,update和insert 相關圖片電腦insert是什么意思本教程是對ASP的介紹。主要介紹了ASP訪問插入更新刪除的簡單使用。好的,我們把它們寫進一個函數中,并給出一個例子。函數add_del_update(tableinsert鎖表嗎...

  • Java常用框架,常用的web開發框架

    Java常用框架,常用的web開發框架 相關圖片android框架自從接觸到PHP開發以來,已經使用了許多框架。雖然沒有對每個框架進行深入的研究,但是對使用的每個PHP框架函數都有一定的了解。在這一點上,我將把一些常用的PHP常見的...

熱評文章

關注微信

变脸官网查询