ホームページ php教程 PHP源码 PHP面向对象——多态

PHP面向对象——多态

May 25, 2016 pm 05:12 PM
phpオブジェクト指向

      多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为。    

      PHP不支持重载实现多态,但是PHP可以变向的实现多态效果。如下:

class a{    function test($i){ // $i可以是任何类型的变量
        print_r $i;
    }
}
ログイン後にコピー

      上例,可以看出由于PHP是弱类型语言,所以$i可以是任何类型的变量,这样一个函数就可以实现如java等强类型语言中靠改变参数类型重载方法的多态形式。

      这种形式比JAVA的参数类型重载更便捷高效,但也存在问题,如下:

<?php/**
教师类有一个drawPolygon()方法需要一个Polygon类,用来画多边形,此方法内部调用多边形的draw()方法,但由于弱类型,我们可以传入Circle类,就会调用Circle类的draw方法,这就事与愿违了。甚至可以传入阿猫、阿狗类,如果这些类没有draw()方法还会报错。*/class Teacher{    function drawPolygon($polygon){ 
        $polygon->draw(); 
    }    
}class Polygon{    function draw(){        echo "draw a polygon";
    }
}class Circle{    function draw(){        echo "draw a circle";
    }
}?>
ログイン後にコピー

      可以看出这样灵活的多态,需要一些控制,在PHP5.3以后可以对参数做类型限制,如下:

// 仿java,在变量参数前加一个限制类名
    function drawPolygon(Polygon $polygon){ 
        $polygon->draw(); 
    }
ログイン後にコピー

      这样就限制了只能传入Polygon及其子类。

     还有一只是改变参数数量的重载,同样是因为PHP也不支持方法的重载,所以也需要些变通的方法实现,如下:

<?php// 通过可变参数来达到改变参数数量重载的目的
// 不是必须传入的参数,必须在函数定义时赋初始值function open_database($DB, $cache_size_or_values=null, $cache_size=null)
{    switch (function_num_args())  // 通过function_num_args()函数计算传入参数的个数,根据个数来判断接下来的操作    {        case 1:            $r = select_db($DB);            break;        case 2:            $r = select_db($DB, $cache_size_or_values);            break;        case 3:            $r = select_db($DB, $cache_size_or_values, $cache_size);            break;
    }    return is_resource($r);
}?>
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP のオブジェクト指向カプセル化の詳細な説明 PHP のオブジェクト指向カプセル化の詳細な説明 Aug 11, 2023 am 11:00 AM

PHP オブジェクト指向カプセル化の詳細な解釈 カプセル化は、オブジェクト指向プログラミングの 3 つの主要な特徴の 1 つであり、データとデータに対する操作をクラスにカプセル化し、特定の実装の詳細を外部プログラムから隠し、外部インターフェイスを提供することを指します。 PHP では、カプセル化の概念は、アクセス修飾子 (public、protected、private) を使用してプロパティとメソッドのアクセス可能性を制御することによって実装されます。まず、アクセス修飾子の役割を見てみましょう。 public (public): パブリック プロパティとメソッドは次のことができます。

PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのバージョン管理と管理を実装する方法 PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのバージョン管理と管理を実装する方法 Sep 06, 2023 pm 02:39 PM

PHP オブジェクト指向のシンプル ファクトリ モデルを通じてオブジェクトのバージョン管理と管理を実装する方法 大規模で複雑な PHP プロジェクトを開発する場合、バージョン管理と管理は非常に重要です。適切な設計パターンを通じて、オブジェクトの作成と使用をより適切に管理および制御できるため、コードの保守性と拡張性が向上します。この記事では、PHP オブジェクト指向のシンプルなファクトリ パターンを使用してオブジェクトのバージョン管理と管理を実装する方法を紹介します。シンプル ファクトリ パターンは、ファクトリ クラスを通じて指定されたオブジェクトをインスタンス化するクラスを作成するための設計パターンです。

PHP 開発でオブジェクト指向プログラミングのスキルを習得する方法 PHP 開発でオブジェクト指向プログラミングのスキルを習得する方法 Jun 25, 2023 am 08:05 AM

インターネットの発展に伴い、PHP は徐々に Web 開発で最も人気のあるプログラミング言語の 1 つになりました。しかし、PHP の急速な発展に伴い、オブジェクト指向プログラミングは PHP 開発に必要なスキルの 1 つになりました。この記事では、PHP 開発におけるオブジェクト指向プログラミングのスキルを習得する方法について説明します。オブジェクト指向プログラミングの概念を理解する オブジェクト指向プログラミングは、オブジェクト (クラス、プロパティ、メソッド) を使用してコードとデータを編成するプログラミング パラダイムです。オブジェクト指向プログラミングでは、コードが再利用可能なモジュールに編成されるため、プログラムのパフォーマンスが向上します。

PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのシームレスな切り替えと置換を実現する方法 PHP オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのシームレスな切り替えと置換を実現する方法 Sep 06, 2023 am 08:01 AM

PHP のオブジェクト指向のシンプル ファクトリ モードを通じてオブジェクトのシームレスな切り替えと置換を実現する方法 はじめに: PHP 開発では、オブジェクト指向プログラミング (OOP と呼ばれるオブジェクト指向プログラミング) が非常に一般的なプログラミング パラダイムです。オブジェクト指向設計パターンにより、コードの保守性と拡張性がさらに向上します。この記事では、オブジェクトのシームレスな切り替えと置換を実現するための、PHP の単純なファクトリ パターンに焦点を当てます。シンプルファクトリーパターンとは何ですか?シンプルなファクトリーパターン(シンプル)

PHP オブジェクト指向のシンプルなファクトリ パターンを使用して柔軟なオブジェクト インスタンスを作成する方法 PHP オブジェクト指向のシンプルなファクトリ パターンを使用して柔軟なオブジェクト インスタンスを作成する方法 Sep 06, 2023 pm 02:12 PM

PHP オブジェクト指向のシンプル ファクトリ パターンを使用して柔軟なオブジェクト インスタンスを作成する方法 シンプル ファクトリ パターンは、オブジェクト作成ロジックを公開せずにオブジェクト インスタンスを作成する一般的な設計パターンです。このモードは、コードの柔軟性と保守性を向上させることができ、入力条件に基づいてさまざまなオブジェクトを動的に作成する必要があるシナリオに特に適しています。 PHP では、オブジェクト指向プログラミングの特性を利用して、単純なファクトリ パターンを実装できます。以下の例を見てみましょう。次のようなグラフ計算機を作成する必要があるとします。

PHP のオブジェクト指向継承メカニズムを理解する PHP のオブジェクト指向継承メカニズムを理解する Aug 10, 2023 am 10:40 AM

PHP のオブジェクト指向継承メカニズムを理解する 継承はオブジェクト指向プログラミングにおける重要な概念であり、古いクラスの機能を含む新しいクラスの作成を可能にします。 PHP では、キーワード extends を使用して継承を実現できます。継承を通じて、サブクラスは親クラスのプロパティとメソッドを継承し、新しいプロパティとメソッドを追加したり、継承されたメソッドをオーバーライドしたりできます。例を通して、PHP のオブジェクト指向継承メカニズムを理解しましょう。 classAnimal{public$name

PHP がオブジェクト指向プログラミングを実装し、コードの可読性と保守性を向上させる方法 PHP がオブジェクト指向プログラミングを実装し、コードの可読性と保守性を向上させる方法 Jun 27, 2023 pm 12:28 PM

インターネット技術の継続的な発展に伴い、PHP は一般的な Web サイト開発言語の 1 つとなり、PHP オブジェクト指向プログラミングも学習する必要がある知識ポイントになりました。オブジェクト指向プログラミング (OOP) は、データと動作をオブジェクトに結合してコードの再利用性、可読性、保守性を向上させることを中心概念とするプログラミング パラダイムです。この記事では、PHP を使用してオブジェクト指向プログラミングを実装し、コードの可読性と保守性を向上させる方法を説明します。オブジェクト指向プログラミングの基本概念 オブジェクト指向プログラミングでは、各オブジェクトには一連のプロパティがあります。

PHP オブジェクト指向プログラミングにおける一般的な問題の詳細な説明 PHP オブジェクト指向プログラミングにおける一般的な問題の詳細な説明 Jun 09, 2023 am 09:27 AM

PHP 言語は、学習と使用が簡単であるため、非常に人気のある Web 開発言語となっています。オブジェクト指向プログラミングは、PHP 言語における最も重要なプログラミング パラダイムの 1 つです。ただし、オブジェクト指向プログラミングは簡単に習得できるものではないため、いくつかの一般的な問題が頻繁に発生します。この記事では、PHP のオブジェクト指向プログラミングに関する一般的な問題の詳細な分析を提供します。質問 1: オブジェクトを作成するにはどうすればよいですか? PHP では、new キーワードを使用してオブジェクトを作成できます。例: classMyClass{/

See all articles