検索
ホームページバックエンド開発PHPチュートリアルPHPでのimplementの使用例を詳しく解説

PHPでのimplementの使用例を詳しく解説

Jul 03, 2017 am 10:12 AM
implementsphp詳しい説明

PHP クラスのインターフェースのアプリケーション キーワードは、インターフェースと実装です。属性はすべて、抽象または定数であるクラス名、つまりクラスが所有するメソッドを指します。渡されたパラメータは、抽象クラスに似た制約と仕様として機能します。

クラスへのインターフェースの適用1. キーワード: インターフェース

2. インターフェースの導入と作成

インターフェース: メンバー属性はすべて抽象または特殊です定数の抽象クラス。

ルール:

1. クラス内のすべてのメソッドは抽象です。 2. 抽象メソッドには抽象を追加する必要はありません。

3. インターフェースの抽象メソッド属性は public です。

4. メンバー属性は定数である必要があります。

フォーマットコードは次のとおりです:

interface demo { 
const NAME = "常量对象属性"; 
function myfun1(); //抽象方法
function myfun2(); //抽象方法,不用具体写入逻辑 
}

1. インターフェースの定義と呼び出し

<?php
interface Cinema
{
  const film = &#39;加勒比海盗&#39;;
  public function show();
}
class Order implements Cinema
{
  public function show()
  {
    echo "影院 接口开放了<br>";
  }
}
$face = new Order();
echo $face->show();    
echo Cinema::film;

説明: 上記の例で注意すべき点の 1 つは、インターフェースのメソッド名が show であり、そのクラスがインターフェイスを継承するには show メソッドが必要です。そうでない場合は、エラーが報告されます。言い換えれば、インターフェイスのメソッドは偽物であり、実際に機能するのは継承されたクラスのメソッドです。ここでのインターフェイスは PHP の抽象クラスに少し似ていますか?

第二に、パラメーターの制約が厳しいです


<?php
interface Cinema
{
  public function show(Order $show,$num);
}
// 显示正常
class Order implements Cinema
{
  public $number=&#39;0011排&#39;;
  public function show(Order $show,$num)
  {
    echo $show->number.$num;
  }
}
$face= new Order();
$face->show(new Order,$num=&#39;3人&#39;);//输出 0011排3人

注: 上記の例はインターフェイス クラスを継承します。インターフェイス メソッドを呼び出すとき、渡されるパラメーターはインターフェイス内のパラメーター名と一致している必要があります。それ以外の場合は、エラーが報告されます。

3、インターフェース間の継承とインターフェースの呼び出しによるパラメータの受け渡し

<?php
interface Cinema
{
  public function show();
}
interface Cinema1 extends Cinema
{
  public function show1(Order1 $object,$num);
}
class Order implements Cinema1
{
  public function show()
  {
    echo "准备就绪<br>";
  }
  public function show1(Order1 $object,$num)
  {
    //var_dump($object);
    echo $object->number."$num<br>";
  }
}
class Order1
{
  public $number="0012排";
  function fun(){
    echo &#39; =================&#39;;
  }
}
$show = new Order1;
$show->fun();     
$test = new Order();
$test->show();      
$test->show1($show,$num=&#39;6人&#39;);
// 输出 ===============准备就绪0012排6人

説明: 上記の例からわかるように、インターフェース Cinema1 はインターフェース Cinemal を継承し、クラス Order はインターフェース Cinema1 を継承します。 Order クラスに 2 つのメソッドが含まれていることに気づいたかどうかはわかりませんが、1 つは show で、もう 1 つは show1 です。どちらかが欠けていると、致命的なエラーが報告されます。 show1(Order1 $object,$num) の Order1 は、クラス Order1 と同じルート継承クラス名を持つ必要があります。それらが異なる場合、致命的なエラーが報告されます。では、インターフェイスが複数のクラスに継承されており、クラス名が異なる場合はどうすればよいでしょうか?次に、以下で説明する self を使用する必要があります

1 つのインターフェースに対する 4 つの多重継承

<?php
interface demo {
  const NAME = "电影名称";
  function fun1();
  function fun2();
}
interface demo2 {
  function fun3();
  function fun4();
}
interface demo3 {
  const TEST = "这里是测试Test";
  function fun5();
}
class MyDemo implements demo, demo2 {
  function fun1() {
    echo "你好";
  }
  function fun2() {
    echo "----------";
  }
  function fun3() {
    echo "我也好<br />";
  }
  function fun4() {
    echo "大家都好<br />";
  }
}
class YourDemo extends MyDemo implements demo3 {
  function fun5() {
    echo "继承类后引用接口";
  }
}
$p = new YourDemo;
$p->fun1();
$p->fun2();
$p->fun3();
$p->fun4();
$p->fun5();

上記の出力

こんにちは----------私もです

皆さんこんにちは

クラスを継承した後にインターフェースを参照する

上記の例では、キーワードinterfaceを使用してインターフェースが定義されており、インターフェース内のメソッドを実装するためにキーワードimplementsが使用されていることがわかります。別の例:

<?php
//定义接口
interface User{
  function getDiscount();
  function getUserType();
}

class VipUser implements User{ //VIP用户 接口实现
  private $discount = 0.8;  // VIP 用户折扣系数
  function getDiscount() {
    return $this->discount;
  }
  function getUserType() {
    return "VIP用户";
  }
}
class Goods{
  var $price = 88;
  var $vc;
  function run(User $vc){   //定义 User 接口类型参数,这时并不知道是什么用户
    $this->vc = $vc;
    $discount = $this->vc->getDiscount();
    $usertype = $this->vc->getUserType();
    echo $usertype."商品价格:".$this->price*$discount;
  }
}
$display = new Goods();
$display ->run(new VipUser); //VIP用户商品价格:70.4

Thisこの例は、PHP インターフェイスの単純なアプリケーションを示しています。この例では、ユーザー インターフェイスはユーザーの割引を実装し、VipUser クラスは特定の割引係数を実装します。最後に、製品カテゴリ「Goods」は、ユーザー インターフェイスに基づいてさまざまなユーザー引用を実装します

最後に要約します:

抽象クラスとインターフェイスの違い

インターフェイスは特別な抽象クラスであり、次のようにすることもできます。モデルの仕様と見なされます。インターフェイスと抽象クラスの一般的な違いは次のとおりです。 1. サブクラスがインターフェイスを実装する場合、必要かどうかに関係なく、インターフェイス内のすべてのメソッドを実装する必要があります。必要なメソッドを実装します。

2. インターフェイスで定義されたメソッド名が変更された場合、このインターフェイスを実装するすべてのサブクラスはメソッド名を同期的に更新する必要があり、抽象クラスのメソッド名が変更された場合、そのサブクラスの対応するメソッド名は変更されません。影響を受けます。(古いメソッドの実装と比較して) 新しいメソッドになるだけです。

3. 抽象クラスは単一でのみ継承できます。サブクラスが複数の親クラスから継承する必要がある関数を実装する必要がある場合は、インターフェイスを使用する必要があります。

以上がPHPでのimplementの使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションがすでに開始されているかどうかを確認するにはどうすればよいですか?PHPセッションがすでに開始されているかどうかを確認するにはどうすればよいですか?Apr 30, 2025 am 12:20 AM

PHPでは、session_status()またはsession_id()を使用して、セッションが開始されたかどうかを確認できます。 1)session_status()関数を使用します。 php_session_activeが返された場合、セッションが開始されました。 2)SESSION_ID()関数を使用します。空の文字列が返された場合、セッションが開始されます。どちらの方法でもセッション状態を効果的に確認でき、使用する方法を選択することは、PHPバージョンと個人的な好みに依存します。

Webアプリケーションでセッションを使用することが不可欠なシナリオを説明してください。Webアプリケーションでセッションを使用することが不可欠なシナリオを説明してください。Apr 30, 2025 am 12:16 AM

Sessionsionsionsarevitalinwebapplications、特にコマースプラットフォームの前。

PHPでの同時セッションアクセスをどのように管理できますか?PHPでの同時セッションアクセスをどのように管理できますか?Apr 30, 2025 am 12:11 AM

PHPでの同時セッションアクセスの管理は、次の方法で実行できます。1。データベースを使用してセッションデータを保存します。これらの方法は、データの一貫性を確保し、並行性のパフォーマンスを向上させるのに役立ちます。

PHPセッションを使用することの制限は何ですか?PHPセッションを使用することの制限は何ですか?Apr 30, 2025 am 12:04 AM

phpsessionshaveverallimitations:1)storagecconstraintscanleadtoperformanceissues; 2)securityvulnerablesliasitylikessessionfixationAttacksicexist;

負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。Apr 29, 2025 am 12:42 AM

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

セッションロックの概念を説明します。セッションロックの概念を説明します。Apr 29, 2025 am 12:39 AM

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの選択肢はありますか?PHPセッションの選択肢はありますか?Apr 29, 2025 am 12:36 AM

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

PHPのコンテキストで「セッションハイジャック」という用語を定義します。PHPのコンテキストで「セッションハイジャック」という用語を定義します。Apr 29, 2025 am 12:33 AM

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。