2017-09-05 10 views
3

私はこのクラスを持っています。このような昔ながらのPHPオブジェクト:これは単なるカプセル化ですか?

class Foo 
{ 
    private $value; 

    public function getValue() 
    { 
     return $this->value; 
    } 
} 

このFoo::getValue()はが「FOO」または「bar」にあるかどうかを確認するために使用されます。代わりに、使用これらの、...

if ($foo->getValue() == 'foo') { 

} 

if ($foo->getValue() == 'bar') { 

} 

は、私はこれらのメソッドを公開します。

if ($foo->isValueFoo()) { 

} 

if ($foo->isValueBar()) { 

} 

このリファクタリング操作はどのように呼び出されますか?私は冗長だが話すインタフェースを促進したい。私は 'foo'または 'bar'スカラを公開したくありません。良いかベストプラクティスですか?

答えて

2

100の文字列値をチェックしたい場合は、これを実現するために100の機能を発揮する必要があります。あなたは__callの魔法のようなものを試すことができます。

ここでは、これを達成するための__callの魔法を使用しています。これは単なるサンプルコードです、あなたは必要な変更を行うことができます。

このクラスオブジェクトでは、名前がprefix:isValuepostfix:placeholderValueStringの任意のメソッドを呼び出すことができます。あなたはこのsubstr_replace($functionName, "", 0,strlen("isValue"))またはsubstr($functionName, strlen("isValue"))

または Try this code snippet here

<?php 
ini_set('display_errors', 1); 

class Foo 
{ 
    private $value="foo"; 

    public function __call($functionName, $arguments=array()) 
    { 
     if(strpos($functionName, "isValue")===0){ 
      $value= strtolower(substr_replace($functionName, "", 0,strlen("isValue"))); 
      if($this->value==$value){ 
       return true; 
      } 
     } 
     return false; 
    } 
} 
$object= new Foo(); 
echo $object->isValueFoo(); 
echo $object->isValueBar(); 
+0

'のSUBSTR(( "ISVALUE")strlenを$ functionNameを、)私が思う' – zerkms

+0

@zerkms 'のいずれかを使用することができる接尾文字列値を取得するための

strposはここでもうまくいくでしょう。 –

+0

私はこの 'substr_replace($ functionName、" "、0、strlen(" isValue "))を置き換えることを意味します。 – zerkms

関連する問題