2012-06-22 76 views
1

当我运行下面的代码,我得到B预期:有没有办法在PHP中继承ffmpeg_movie类?

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

究竟这是怎么回事,有没有解决办法?

回答

1

我也没搞清楚问题的根源是什么?我设法解决它,但不直接扩展ffmpeg_movie类,而是使用__call__get__set PHP魔术方法来模仿继承。

0

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

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

直到有人来了一个解决方案,你可能会反复折腾像这样的B级中:

public function whoAmI() { 
    return __CLASS__; 
} 

OR(从谷歌搜索)MAYBE

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

这不仅仅是get_class函数的bug。 'B'类方法也不可访问(请参阅更新的问题)。 –

相关问题