2012-06-22 75 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'類方法也不可訪問(請參閱更新的問題)。 –

相關問題