2011-07-29 12 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 4のサポートは2007年12月31日以降中止されました。PHP 5へのアップグレードを検討してください。 –

+0

@ダゴン:私は知っているが、私はphp4に気を配らなければならない:D – Chameron

+0

あなたはそうしない。 –

答えて

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が依存関係になってしまいます。 You should also avoid all static classesは、呼び出し元クラスを静的クラスに密接に結合するためです。これにより、メンテナンスとテストが必要以上に苦しくなります(グローバルと同じ)。

また、あなたは、PHPの、もはやサポートされているバージョンを使用して、その危険べきではありませんhttps://secure.wikimedia.org/wikipedia/en/wiki/Solid_(object-oriented_design)

+0

ありがとう、私はクラスを使用する方法を変更しました – Chameron

関連する問題