2017-05-05 63 views
-1

說我有以下類:使用靜態類作爲變量

class App { 
    public static $url; 

    static function boot() { 
     self::$url = new Url(); 
    } 
} 

class Url { 
    function redirect ($url) { 
     header('Location: '.$url); 
    } 
} 

我如何使用這個類,像這樣:

App::boot(); 

$app = App; 
$app->url->redirect('http://example.com'); 

???

+1

您是否試過此代碼?怎麼了?或者我們是你的翻譯? –

+0

它在我的例子中將'App'解釋爲一個常量,顯然不起作用。這到底是怎麼回事? – kjdion84

+0

當問一個問題時,你應該**發佈你已經嘗試過**的內容,並清楚說明什麼是不工作**並提供[**最小,完整和可驗證示例**](// stackoverflow.com/help/mcve)。我建議閱讀[問]一個好問題和[完美問題](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。 –

回答

3

你有什麼理由讓你的課App爲靜態嗎?

否則,你可以做這樣的:

class App { 

    public $url; 

    public function __construct(){ 
     $this->url = new Url(); 
    } 

} 

class Url { 
    function redirect ($url) { 
     header('Location: '.$url); 
    } 
} 

$app = new App(); 
$app->url->redirect('http://example.com'); 

如果你想保持它的靜態:

class App { 

    public static $url; 

    public static function boot(){ 
     self::$url = new Url(); 
    } 

} 

class Url { 
    function redirect ($url) { 
     header('Location: '.$url); 
    } 
} 

App::boot(); 
App::$url->redirect('http://example.com'); 
+0

我將它用作靜態,因此它是全局可用的。另外,我試圖將它作爲刀片模板中的參數傳遞,以便我可以在模板本身內使用它的靜態對象。 – kjdion84

+0

@ kjdion84然後你可以嘗試第二種方式。但是,如果我沒有弄錯,可以將對象實例傳遞給刀片模板。 –

+0

我想將整個'App'對象傳遞給模板,所以我可以使用它作爲'$ app'。我仍然試圖找出沒有在刀片模板本身中使用''聲明的最佳方法。我在Laravel外面使用刀片。 – kjdion84

0

可以使用一個變量來訪問靜態屬性(見下面的代碼),但我會建議避免它。

class App { 
    public static $url; 
    public static function boot(){ 
     self::$url = new Url(); 
    } 
} 

class Url { 
    function redirect ($url) { 
     header('Location: '.$url); 
    } 
} 

$app = 'App'; 
$app::$url->redirect('http://example.com');