1

こんにちは、php ポリモーフィズムを実現するためのコードを作成しようとしています。コードのどこが間違っているのかわかりません。「致命的なエラー: Sample::a() を再宣言できません」というエラーが表示されます。これが私のコードです。この問題を解決してください。

 <?php
 class Sample
{
public function a()
{
 echo "hi";
}
public function a($chr)
{
 for ($chr=0;$chr<10;$chr++)
 echo $chr;
}
 public function a($b,$c)
 {
for($g=$b;$g<$c;$g++)
echo $g
}
}

$s=new Sample();
$s->a();
$s->a($chr);
$s->a(1,10);
?>  
4

4 に答える 4

5

PHP はメソッドのオーバーロードをサポートしていません...残念ながら!

魔法のメソッドを使用したり、サブメソッド呼び出しをラップしたりするなど、オーバーロードのように感じる何かを達成するためのいくつかのファンキーな方法があります。ただし、これらは本物に近づくことさえありません。

于 2012-11-29T10:07:11.187 に答える
2

これはポリモーフィズムではありませんが、次のとおりです。

class A {
    public function foo() {
        return 1;
    }
}

class B {
    public function foo() {
        return 2;
    }
}

$items = array(new A(), new B());

echo $items[0]->foo();
echo $items[1]->foo();
于 2012-11-29T10:10:44.863 に答える
0

http://www.php.net/manual/en/language.oop5.overloading.php

上記のリンクを参照してください。役立つと思います。

于 2012-11-29T10:14:15.463 に答える
0

PHP は、要求された方法でのメソッドのオーバーロードをサポートしていません。

最も近い方法は、動的引数を使用してそれを偽造することです。次のようなもの:

class dynamic {
    public function example() {
        $args = func_get_args();
        switch(count($args)) {
            case 1 : return $this->example_1arg($args[0]);
            case 2 : return $this->example_2args($args[0],$args[1]);
            //etc..
        }
    }
    private function example_1arg($arg1) {
        //....
    }
    private function example_2args($arg1,$arg2) {
        //....
    }
}

この例ではデータ型が考慮されていないため、それでも適切なメソッドのオーバーロードは得られません。を使用してある程度それを配線することはできinstanceofますが、PHP は (まだ) プリミティブ型の型ヒントをサポートしていないため、完全には実行できません。

于 2012-11-29T10:17:20.587 に答える