1

PHPの関数/メソッドでインターフェースパラメータを使用できるかどうか疑問に思いました。

私は.Netでコーディングすることに慣れており、.Netを使用すると、次のインターフェイスを使用するなど、これが可能になります。

interface IVehicleDataProvider
{
    public void Create(IVehicle Vehicle);
}

次に、これを次のようなクラスに実装できます。

class CarDataProvider : IVehicleDataProvider
{
    public void Create(Car Car)
    {
        //do something
    }
}

また

class TruckDataProvider : IVehicleDataProvider
{
    public void Create(Truck Truck)
    {
        //do something
    }
}

車またはトラックがIVehicleインターフェースを実装している限り。

PHPでも同じことができますか?

4

3 に答える 3

3

いいえ、インターフェイスで1つのタイプを定義し、実装者で別のタイプを定義することはできません(サブクラスであっても)。実装者はインターフェイスに完全に従う必要があります。

しかし、あなたが定義したとしても

function create(IVehicle $vehicle);

Carsとsを渡すことはできますTruck

于 2012-08-28T20:53:44.783 に答える
0

いいえ、クラス内の宣言はインターフェイス宣言と完全に互換性がある必要があるため、機能しません。そのため、パラメータタイプとしてIVehicleを使用する必要があります。

于 2012-08-28T20:53:15.727 に答える
0

はい、PHP 5でインターフェースを使用できますが、まだ比較的未成熟です。上記の例では、次のようなものを使用します。

interface IVehicleDataProvider
{
    public function create(IVehicle $vehicle);
}

class CarDataProvider implements IVehicleDataProvider
{
    public function create(IVehicle $car) {
        //do something
    }
}

PHPは戻り型の宣言をサポートしていないため、関数voidを宣言することはできません(ただし、関数のドキュメントに戻り型を書き留めておく必要があります)。

インターフェイスを拡張することもできないため、インターフェイスの関数がのインスタンスを受け入れることを宣言する場合createIVehicleDataProvider関数IVehicleCarDataProvider::createIVehicleインターフェイスのインスタンスを受け入れる必要があります。

于 2012-08-28T20:57:44.567 に答える