2016-12-16 44 views
1

我只是試圖圍繞這個整體概念包圍我的頭。我試圖將頻繁/全局使用的類屬性和方法放在最上面的名稱空間中,並在其他類中使用它們。在父命名空間中使用PHP類

所以我有一個命名空間稱爲App

文件名:core.php中

namespace App; 

class Core { 

    public function version() { 
     return '1.0'; 
    } 

} 

文件名:settings.php這個

namespace App\Core; 

use Core; // I know this is wrong 

class Settings { 

    public function getCurrent() { 
     return 'The current version is: '.$this->Core->version(); // How do I do this? 
    } 

} 

文件名:index.php文件

include('core.php'); 
include('settings.php'); 

$app = new App\Core; 

echo $app->version(); // 1.0 OK... 
echo $app->settings->getCurrent(); // Echo: The current version is: 1.0 

因此,在上面的例子中,我將如何在其他名稱空間中的其他類中的應用程序中使用Core類中的所有函數?

+0

在「設置」中創建「Core」類的對象s' –

+3

在類中創建其他對象的實例並且在此實例中使用類的方法實際上是一個壞主意。你應該重新思考你的課程或解釋你想做什麼。 –

+1

當你創建一個'Settings'對象時,創建一個'Core'類的對象並**將**傳遞給'Settings'。無論是作爲構造函數參數還是通過調用setter方法。是的,這看起來很乏味,但最終你會因此而跑得更好。從長遠來看,使用['Dependency Injection Container'](http://fabien.potencier.org/do-you-need-a-dependency-injection-container.html)。 – Yoshi

回答

0

現在不能測試,但我會做somethingh這樣的:

core.php中

namespace App; 

class Core { 

    public static function version() { 
     return '1.0'; 
    } 

} 

然後settings.php這個

require('Core.php'); 

    class Settings { 

     public function getCurrent() { 
      return 'The current version is: '.Core::version(); 
     } 

    } 

最後:

include('Core.php'); 
include('Settings.php'); 

$app = new Settings; 

echo Core::version() // 1.0 OK... 
echo $app->settings->getCurrent(); // Echo: The current version is: 1.0