2017-06-12 10 views
1
Zend Frameworkの2の新しいインターン

、このコードは、より適応させることを試みて:ZendFramework:このPHPコードを脆弱にする方法は?

class UserCohort { 
    private $toString; 

    function __construct($count) 
    { 
     $this->count = $count; 
     if ($count < 5000) { 
      $this->toString = "less_than_5k"; 
     } else if ($count < 25000) { 
      $this->toString = "5k_to_25k"; 
     } else if ($count < 100000) { 
      $this->toString = "25k_to_100k"; 
     } else { 
      $this->toString = "greater_than_100k"; 
     } 
    } 

    public function __toString() 
    { 
     return $this->toString; 
    } 
} 

は範囲をサポートして列挙のような機能を取得しようとしてすなわちUserCohort(4998)== UserCohort(4999)など、依存しましたあなたがそれをどのようにプログラムするかについて。私はJavaでこれを行う方法を知っているが、上記の私のPHPソリューションよりも良い方法はありますか?

実際にSPLENUMクラスが役に立たなかったのですが、他のデザインパターンを考えるとこのコードを脆弱にすることは考えられませんでしたが、工場について考えましたが、そのような単純な機能のための多くの作業のようです。

ありがとうございます!

答えて

1

あなたはあなたの文字列のためにいくつかの定数を使用し、他の句ならば代わりのスイッチを使用することができますように行うことができます。

class UserCohort { 
    const LESS_THEN_5K = "less_than_5k"; 
    const RANGE_5K_TO_25K = "5k_to_25k"; 
    const RANGE_25K_TO_100K = "25k_to_100k"; 
    const GREATER_THEN_100K = "greater_than_100k"; 

    private $string; 

    private $count; 

    function __construct($count) 
    { 
     $this->count = $count; 
     switch(true){ 
      case $count < 5000: 
       $this->string = self::LESS_THEN_5K; 
       break; 
      case $count < 25000: 
       $this->string = self::RANGE_5K_TO_25K; 
       break; 
      case $count < 100000: 
       $this->string = self::RANGE_25K_TO_100K; 
       break; 
      default: 
       $this->string = self::GREATER_THEN_100K; 
     } 
    } 

    public function __toString() 
    { 
     return $this->string; 
    } 
} 

しかし、私は、これはその後、適切な代替美学についての詳細であると思います。 入力として受け取る変数タイプ$countをチェックし、数値でない場合は例外をスローすることも考えてください。

0

UserCohort(4998) == UserCohort(4999)のようなオブジェクトインスタンスを比較すると、期待していないことになります。文字列結果ではなくobjectを比較することを意味するためです。 オブジェクトから得られた文字列を比較する場合は、objectを文字列に変換する必要があります。それとも、この

strval(UserCohort(4998)) == strval(UserCohort(4999)); 
関連する問題