2011-07-29 118 views
1
<?php 
    global $words; 

    class A { 

     function say() 
     { 
      global $words; 
      $words = 'man'; 
      A::hello(); 
      A::bye(); 

      echo $words; 
     } 

     function hello(){ 
      global $words; 
      $words .= 'hello'; 
     } 

     function bye(){ 
      global $words; 
      $words .= 'bye'; 
     } 

    } 
    A::say(); 
?> 

我認爲這很愚蠢,你能指出我一個好方法嗎?php4 - 我應該在這種情況下使用全局變量嗎?

+3

你不應該使用PHP,其危險的不再支持的版本。從手冊「支持PHP 4自2007-12-31以來已停止使用,請考慮升級到PHP 5.」 – 2011-07-29 04:17:23

+0

@Dagon:我知道,但我必須關心php4:D – Chameron

+0

不,你沒有,你選擇。 – 2011-07-29 04:25:29

回答

2

聲明$words作爲類內的靜態變量:

class A { 
    static $words; 

    static function say() { 
     self::$words = 'man'; 
     A::hello(); 
     A::bye(); 

     echo self::$words; 
    } 

    static function hello() { 
     self::$words .= 'hello'; 
    } 

    static function bye() { 
     self::$words .= 'bye'; 
    } 
} 

A::say(); 
+0

它會運行php4嗎? – Chameron

+0

是的。閱讀更多:http://php.net/manual/en/language.oop5.static.php 請注意,PHP4不支持訪問修飾符。此外,您可能需要將命名空間從'$ words'引用到'self :: $ words'。不知道PHP是否讓你這樣做。 –

+0

php4.4.6:解析錯誤:解析錯誤,意外的T_STATIC,期待T_OLD_FUNCTION或T_FUNCTION或T_VAR或'} – Chameron

1

PHP4代碼(與PHP5兼容)。

class A { 

    var $words; 

    function A($words) { 
     $this->words = $words; 
    } 

    function say() { 
     $this->words = 'man'; 
     $this->hello(); 
     $this->bye(); 
     return $this->words; 
    } 

    function hello() { 
     $this->words .= 'hello'; 
    } 

    function bye() { 
     $this->words .= 'bye'; 
    } 
} 

$a = new A($words); 
echo $a->say(); 

一般而言,you do not want to use the global keyword when doing OOPPass any dependencies through the ctor or via appropriate setters。依賴全局變量會很快將副作用引入到你的應用程序中,破壞封裝並且會讓你的API對它的依賴性撒謊。因爲它們會將調用類緊密地耦合到靜態類。這使得維護和測試比需要更加痛苦(全局變量相同)。

另見https://secure.wikimedia.org/wikipedia/en/wiki/Solid_(object-oriented_design)

+0

謝謝,我改變了我使用類的方式 – Chameron

相關問題