2016-11-22 16 views
0

我無法自動加載名稱空間中的父類。沒有繼承子類加載;但是孩子不能自動加載父類。PHP默認的spl自動載入函數不會在命名空間中加載類的父項

文件結構:

/index.php 
/lib/router.php 
/lib/ns1/parent1.php 
/lib/ns1/child1.php 

的index.php:

spl_autoload_extensions(".php"); 
spl_autoload_register(); 
require '/lib/router.php'; 

/lib/router.php

$child1 = new ns1\child1(); 

/lib/ns1/child1.php

namespace ns1; 
class child1 extends parent1 {} 

/lib/ns1/parent1.php

namespace ns1; 
class parent1 { function __construct() {} } 

當我刪除 「延伸」 部分,從child1一切正常。 隨着「延伸」部分,我有錯誤:

Fatal error: spl_autoload(): Class parent1\child1 could not be loaded in /lib/ns1/child1.php

有一些方法怎麼做,與內置的默認SPL自動加載功能? 非常感謝您的幫助。

+0

'parent'是[保留字](http://php.net/manual/en/reserved.classes.php#reserved.classes .special),它可能只是一個例子,但如果它是一個壞的例子 –

+0

當然它只是例子:)名稱是爲了更好的理解。但我糾正它... – Otak

回答

0

我發現在這個答案對我的作品 https://stackoverflow.com/a/7987085/5208203

只需添加通過set_include_path解決方案()到index.php文件:

set_include_path(get_include_path().PATH_SEPARATOR."/lib"); 
spl_autoload_extensions(".php"); 
spl_autoload_register(); 
require '/lib/router.php'; 

但我不知道性能,可能是它只是解決我在我的班級定義中遇到的另一個故障......

相關問題