2017-09-05 83 views
3

我已經學過這門課。一個普通的舊的PHP對象是這樣的:這只是封裝?

class Foo 
{ 
    private $value; 

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

Foo::getValue()用於檢查是否是「富」或「棒」。而不是使用這些,...

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

} 

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

} 

我想公開這些方法。

if ($foo->isValueFoo()) { 

} 

if ($foo->isValueBar()) { 

} 

如何調用這個重構操作?我想推廣e詳細但講話界面。我不想公開'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($ functionName,而strlen的( 「則isValue」))' – zerkms

+0

@zerkms我想' strpos'在這裏也可以很好。 –

+0

我的意思是,以取代本'substr_replace($ functionName,而「」,0,strlen的(「則isValue」))' – zerkms