2011-12-01 104 views
3
<?php 

class A extends B {} 

class B implements C {} 

interface C {} 

上面的代碼拋出「致命錯誤:類‘B’找不到」上課的時候...... 它是一個PHP的錯誤?要麼?類未找到擴展實現了接口在PHP

環境:「PHP 5.3.6-13ubuntu3.2用了Suhosin貼片(CLI)(建:2011年10月13日二十三時19分13秒) 版權所有(C)1997-2011的PHP集團 Zend引擎V2。 3.0,版權所有(C)1998-2010 Zend技術 用的Xdebug的v2.1.0,版權所有(C)2002-2010由德里克Rethans的 「

+1

那裏的所有代碼是?另外,如果它還沒有創建,就不能調用C(order) – Jakub

回答

4

你有麻煩特別是與你的類定​​義的順序。只要接口是在同一個文件中定義的,它可以在任何地方聲明 - 但是在擴展之前,類必須被定義。

以下是完全在PHP中有效的訂單:

class B implements C { ... } 
class A extends B { ... } 
interface C { ... } 

a closed bug requesting clarification in the PHP5 docs

對類似問題的答案(Does the order of class definition matter in PHP?)提到Autoloading。如果您使用多個文件,您可能需要考慮這一點。

+1

正是我在找的東西。謝謝。我想知道爲什麼他們不能一次掃描整個文件... –

1

您聲明順序錯誤的類和接口。這是正確的:

interface C {} 

class B implements C {} 

class A extends B {}