[英]Is this just encapsulation?
我上過這堂課。 一個普通的舊php對象,如下所示:
class Foo
{
private $value;
public function getValue()
{
return $this->value;
}
}
這個Foo::getValue()
用於檢查Foo::$value
是'foo'還是'bar'。 而不是使用這些,......
if ($foo->getValue() == 'foo') {
}
if ($foo->getValue() == 'bar') {
}
我想公開這些方法。
if ($foo->isValueFoo()) {
}
if ($foo->isValueBar()) {
}
如何調用這個重構操作? 我想推廣e冗長但說話界面。 我不想暴露'foo'或'bar'標量。 是好的還是最好的做法?
假設你有100
這樣的字符串值,你要檢查它,為此你必須展示這樣的100
函數來完成這個。 你可以試試類似__call
魔術的功能。
這里我們使用__call
魔術方法來實現這一點。 這只是一個示例代碼,您可以執行所需的更改。
使用此類對象,您可以使用名稱prefix:
調用任何方法prefix:
isValue
和postfix:
placeholderValueString
。
獲取postfix字符串值你可以使用這個substr_replace($functionName, "", 0,strlen("isValue"))
或substr($functionName, strlen("isValue"))
<?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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.