有没有办法在PHP中继承ffmpeg_movie类?

时间:2012-06-22 18:01:52

标签: php class ffmpeg

当我运行以下代码时,我按预期得到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

这到底发生了什么,是否有解决方法?

2 个答案:

答案 0 :(得分:1)

我没有发现问题的根源是什么。我设法通过不直接扩展ffmpeg_movie类来解决它,而是使用__call__get__set PHP魔术方法来模仿继承。

答案 1 :(得分:0)

这是get_class()的未定义行为,之前已多次讨论过。

从PHP 4.3.0开始,常量 CLASS 存在且包含类名。

在有人提供解决方案之前,你可能会在B类中找到类似的东西:

public function whoAmI() {
    return __CLASS__;
}

或(来自谷歌搜索)可能

public function whoAmI() {
    return getClass($this);
}