1

次のコードを実行するとB、期待どおりになります。

class A {
    public function __construct($file){}
}

class B extends A {
    public function __construct() {
        parent::__construct('test.flv');
    }
}

$b = new B();
print get_class($b);

ただし、このコードのわずかに変更されたバージョンを検討してください(ここでffmpeg_movieは、クラスはhttp://ffmpeg-php.sourceforge.netライブラリの一部です)。

class B extends ffmpeg_movie {
    public function __construct() {
        parent::__construct('test.flv');
    }
}

$b = new B();
print get_class($b);

ffmpeg_movieの代わりに戻りますB。さらに、オブジェクトBを使用すると、クラスで定義されたメソッドにアクセスできないことがわかります。$b

class B extends ffmpeg_movie {
    public function __construct() {
        parent::__construct('test.flv');
    }

    public function test() {
        print 'ok';
    }
}

$b = new B();
$b->test();

Fatal error: Call to undefined method ffmpeg_movie::test() in .../test.php on line 13

ここで何が起こっているのでしょうか。回避策はありますか?

4

2 に答える 2

1

問題の原因がわかりませんでした。ffmpeg_movieクラスを直接拡張せず、代わりに__call__getおよび__setPHPマジックメソッドを使用して継承を模倣することで、なんとか解決できました。

于 2012-06-27T17:17:55.867 に答える
0

これはget_class()の未定義の動作であり、これまで何度も説明されてきました。

PHP 4.3.0以降、定数CLASSが存在し、クラス名が含まれています。

誰かが解決策を見つけるまで、あなたはあなたのBクラスの中でこのようなものをいじくり回すかもしれません:

public function whoAmI() {
    return __CLASS__;
}

または(グーグルから)MAYBE

public function whoAmI() {
    return getClass($this);
}
于 2012-06-22T18:16:07.413 に答える