2010-07-30 57 views
3

我有一個配置類,它可以在我的代碼中使用。該類中的一個變量是網站URL。最近,我將SSL添加到了我的服務器,現在我需要檢查這個並將協議分配爲'http'或'https'。聽起來很愚蠢,但...我需要幫助在PHP中設置一個變量

我嘗試的代碼是:

<?php 

class Test 
{ 
    public static $blah = (1 == 1) ? 'this' : 'or this'; 
} 

echo Test::$blah; 

?> 

這產生了分析錯誤。我如何解決它? :/

回答

2

您不能使用計算來確定對象屬性值。您需要這樣做:

<?php 

class Test 
{ 
    public static $blah; 
} 

// set the value here 
Test::$blah = (1 == 1) ? 'this' : 'or this'; 


echo Test::$blah; 

?> 
3

不幸的是,您不能使用表達式設置默認類變量。您只能使用原始類型和值。只有array()被識別。

你可以做的是創造只能被調用一次的「靜態初始化」功能,將設置你的變量...這樣:

<?php 

class Test 
{ 
    public static $blah; 
    private static $__initialized = false; 

    public static function __initStatic() { 
     if(self::$__initialized) return; 

     self::$blah = (1 == 1) ? 'this' : 'or this'; 

     self::$__initialized = true; 
    } 
} 
Test::__initStatic(); 

,然後簡單地從其他文件讀取您的變量:

<?php 
echo Test::$blah; 

如果編輯Test::$blah在後面的代碼,也不會被意外的調用Test::__initStatic()恢復。

+0

+1這是一個非常有趣的設計模式/ php解決方法。將一個函數調用放入一個類文件中感覺有點骯髒,但它可以工作, – 2010-07-30 05:04:47

+0

@Chris Henry:有時你必須在使用PHP時弄髒自己。你絕對不想看到我自定義的Error/Exception/RunTime_Err處理庫。 – 2010-07-30 05:11:58

+0

有點偏題,但前一段時間我的樂隊錄製了一張專輯。當我們掌握時,錄音並不完美。工程師告訴我們:「除非它上面有一點污垢,否則不是搖滾樂。」 PHP也不例外。 – 2010-07-30 16:50:44

相關問題