簡體   English   中英

這只是封裝嗎?

[英]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: isValuepostfix: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM