亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP學習記錄之面向對象(Object-oriented programming,OOP)基礎【接口、抽象類、靜態(tài)方法等】

 更新時間:2019年12月11日 09:37:48   作者:luyaran  
這篇文章主要介紹了PHP學習記錄之面向對象(Object-oriented programming,OOP)基礎,結合實例形式分析了PHP面向對象程序設計中接口、抽象類、靜態(tài)方法等相關概念、原理、用法與操作注意事項,需要的朋友可以參考下

本文實例講述了PHP面向對象(Object-oriented programming,OOP)基礎。分享給大家供大家參考,具體如下:

我們可以使用接口(interface),指定某個類必須實現(xiàn)哪些方法,但不需要定義這些方法的具體內容,我們可以通過 interface 關鍵字來定義,就像定義一個標準的類一樣,但其中定義所有的方法都是空的,但是其中定義的所有方法都必須是公有,這是接口的特性。

但是我們如果要實現(xiàn)一個接口,就得使用 implements 操作符,并且類中必須實現(xiàn)接口中定義的所有方法,否則會報一個致命錯誤,其中類還可以實現(xiàn)多個接口,用逗號來分隔多個接口的名稱,是不是很神奇???來看實例感受下:

<?php
// 聲明一個'iTemplate'接口
interface iTemplate
{
  public function setVariable($name, $var);
  public function getHtml($template);
}
// 實現(xiàn)接口
class Template implements iTemplate
{
  private $vars = array();
  public function setVariable($name, $var)
  {
    $this->vars[$name] = $var;
  }
  public function getHtml($template)
  {
    foreach($this->vars as $name => $value) {
      $template = str_replace('{' . $name . '}', $value, $template);
    }
    return $template;
  }
}

我們可以把在類中始終保持不變的值定義為常量,但是在定義和使用常量的時候不需要使用 $ 符號。需要注意的就是,常量的值必須是一個定值,不能是變量,類屬性,數(shù)學運算的結果或函數(shù)調用。自 PHP 5.3.0 起,我們可以用一個變量來動態(tài)調用類,但該變量的值不能為關鍵字(如 self,parent 或 static),來看實例感受下:

<?php
class MyClass
{
  const constant = '常量值';
  function showConstant() {
    echo self::constant . PHP_EOL;
  }
}
echo MyClass::constant . PHP_EOL;
$classname = "MyClass";
echo $classname::constant . PHP_EOL; // 自 5.3.0 起
$class = new MyClass();
$class->showConstant();
echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
?>

任何一個類,如果它里面至少有一個方法是被聲明為抽象的,那么這個類就必須被聲明為抽象的,并且,定義為抽象的類不能被實例化,完事呢,被定義為抽象的方法只是聲明了其調用方式(參數(shù)),不能定義其具體的功能實現(xiàn),這是抽象類的一些公知的概念。

但是當繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法,另外,這些方法的訪問控制必須和父類中一樣(或者更為寬松)。舉個栗子,例如某個抽象方法被聲明為受保護的,那么子類中實現(xiàn)的方法就應該聲明為受保護的或者公有的,而不能定義為私有的,了解了之后咱們就來看下實例:

<?php
abstract class AbstractClass
{
 // 強制要求子類定義這些方法
  abstract protected function getValue();
  abstract protected function prefixValue($prefix);
  // 普通方法(非抽象方法)
  public function printOut() {
    print $this->getValue() . PHP_EOL;
  }
}
class ConcreteClass1 extends AbstractClass
{
  protected function getValue() {
    return "ConcreteClass1";
  }
  public function prefixValue($prefix) {
    return "{$prefix}ConcreteClass1";
  }
}
class ConcreteClass2 extends AbstractClass
{
  public function getValue() {
    return "ConcreteClass2";
  }
  public function prefixValue($prefix) {
    return "{$prefix}ConcreteClass2";
  }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;
$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>

輸出結果為:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

我們還要記得,子類方法可以包含父類抽象方法中不存在的可選參數(shù),舉個栗子,例如,子類定義了一個可選參數(shù),而父類抽象方法的聲明里沒有,則也是可以正常運行的,如下:

<?php
abstract class AbstractClass
{
  // 我們的抽象方法僅需要定義需要的參數(shù)
  abstract protected function prefixName($name);
}
class ConcreteClass extends AbstractClass
{
  // 我們的子類可以定義父類簽名中不存在的可選參數(shù)
  public function prefixName($name, $separator = ".") {
    if ($name == "Pacman") {
      $prefix = "Mr";
    } elseif ($name == "Pacwoman") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$prefix}{$separator} {$name}";
  }
}
$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>

輸出結果為:

Mr. Pacman
Mrs. Pacwoman

聲明類屬性或方法為 static(靜態(tài)),它可以不實例化類而直接訪問,但是,靜態(tài)屬性不能通過一個類已實例化的對象來訪問(但靜態(tài)方法可以)。另外,由于靜態(tài)方法不需要通過對象即可調用,所以偽變量 $this 在靜態(tài)方法中不可用,也就是說,靜態(tài)屬性不可以由對象通過 -> 操作符來訪問。自 PHP 5.3.0 起,我們可以用一個變量來動態(tài)調用類,但該變量的值不能為關鍵字 self,parent 或 static,實例如下:

<?php
class Foo {
 public static $my_static = 'foo';
 public function staticValue() {
   return self::$my_static;
 }
}
print Foo::$my_static . PHP_EOL;
$foo = new Foo();
print $foo->staticValue() . PHP_EOL;
?>

輸出結果如下:

foo
foo

PHP 5 新增了一個 final 關鍵字,它的作用就是,如果父類中的方法被聲明為 final,則子類無法覆蓋該方法,如果一個類被聲明為 final,則不能被繼承,如下案例,會報錯的哦:

<?php
class BaseClass {
  public function test() {
    echo "BaseClass::test() called" . PHP_EOL;
  }
  final public function moreTesting() {
    echo "BaseClass::moreTesting() called" . PHP_EOL;
  }
}
class ChildClass extends BaseClass {
  public function moreTesting() {
    echo "ChildClass::moreTesting() called" . PHP_EOL;
  }
}
// 報錯信息 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

PHP 不會在子類的構造方法中自動的調用父類的構造方法,如果需要執(zhí)行父類的構造方法,我們可以在子類的構造方法中調用 parent::__construct(),如下:

<?php
class BaseClass {
  function __construct() {
    print "BaseClass 類中構造方法" . PHP_EOL;
  }
}
class SubClass extends BaseClass {
  function __construct() {
    parent::__construct(); // 子類構造方法不能自動調用父類的構造方法
    print "SubClass 類中構造方法" . PHP_EOL;
  }
}
class OtherSubClass extends BaseClass {
  // 繼承 BaseClass 的構造方法
}
// 調用 BaseClass 構造方法
$obj = new BaseClass();
// 調用 BaseClass、SubClass 構造方法
$obj = new SubClass();
// 調用 BaseClass 構造方法
$obj = new OtherSubClass();
?>

輸出結果為:

BaseClass 類中構造方法
BaseClass 類中構造方法
SubClass 類中構造方法
BaseClass 類中構造方法

好啦,本次記錄就到這里了。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設計有所幫助。

相關文章

  • ThinkPHP中__initialize()和類的構造函數(shù)__construct()用法分析

    ThinkPHP中__initialize()和類的構造函數(shù)__construct()用法分析

    這篇文章主要介紹了ThinkPHP中__initialize()和類的構造函數(shù)__construct()用法,以實例形式分析了ThinkPHP中類的初始化時構造子類的方法,是采用ThinkPHP進行面向對象程序設計中比較重要的概念,需要的朋友可以參考下
    2014-11-11
  • PHP之浮點數(shù)計算比較以及取整數(shù)不準確的解決辦法

    PHP之浮點數(shù)計算比較以及取整數(shù)不準確的解決辦法

    這篇文章主要介紹了PHP之浮點數(shù)計算比較以及取整數(shù)不準確的解決辦法,代碼超簡單,需要的朋友可以參考下
    2015-07-07
  • PHP實現(xiàn)WebService的簡單示例和實現(xiàn)步驟

    PHP實現(xiàn)WebService的簡單示例和實現(xiàn)步驟

    這篇文章主要介紹了PHP實現(xiàn)WebService的簡單示例和實現(xiàn)步驟,本文直接給出示例代碼并分步驟講解,需要的朋友可以參考下
    2015-03-03
  • PHPStorm 2020.1 調試 Nodejs的多種方法詳解

    PHPStorm 2020.1 調試 Nodejs的多種方法詳解

    這篇文章主要介紹了PHPSTORM 2020.1 調試 Nodejs的多種方法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • php 替換文章中的圖片路徑,下載圖片到本地服務器的方法

    php 替換文章中的圖片路徑,下載圖片到本地服務器的方法

    下面小編就為大家分享一篇php 替換文章中的圖片路徑,下載圖片到本地服務器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • PHP寫的資源下載防盜鏈類分享

    PHP寫的資源下載防盜鏈類分享

    這篇文章主要介紹了PHP寫的資源下載防盜鏈類分享,需要的朋友可以參考下
    2014-05-05
  • 微信公眾平臺開發(fā)之配置與請求

    微信公眾平臺開發(fā)之配置與請求

    微信公眾平臺是騰訊公司在微信的基礎上新增的功能模塊,通過這一平臺,個人和企業(yè)都可以打造一個微信的公眾號,并實現(xiàn)和特定群體的文字、圖片、語音的全方位溝通、互動。本文給大家介紹微信公眾平臺開發(fā)之配置與請求,需要的朋友可以參考下
    2015-08-08
  • php arsort 數(shù)組降序排序詳細介紹

    php arsort 數(shù)組降序排序詳細介紹

    php arsort函數(shù)用于將數(shù)組中的元素按照降序進行排序,如果排序成功則返回true,否則返回false,本文章向大家講解arsort函數(shù)的基本語法及使用實例,需要的朋友可以參考下
    2016-11-11
  • ThinkPHP自動填充實現(xiàn)無限級分類的方法

    ThinkPHP自動填充實現(xiàn)無限級分類的方法

    這篇文章主要介紹了ThinkPHP自動填充實現(xiàn)無限級分類的方法,是ThinkPHP項目開發(fā)中非常實用的一個技巧,需要的朋友可以參考下
    2014-08-08
  • php制作簡單模版引擎

    php制作簡單模版引擎

    模板引擎(這里特指用于Web開發(fā)的模板引擎)是為了使用戶界面與業(yè)務數(shù)據(jù)(內容)分離而產生的,它可以生成特定格式的文檔,用于網站的模板引擎就會生成一個標準的HTML文檔。
    2016-04-04

最新評論