2013-03-06 60 views
1
class AAA 

{ 

    function getRealValue($var) 
    { 
     $this->var = $var; 
     return $this; 
    } 

    function asString() 
    { 
     return (string) $this->var; 
    } 

} 

$a = new AAA; 
$a->getRealValue(30); 
$a->getRealValue(30)->asString(); 

所以当我调用$ A-> getRealValue(30),它应该返回30,PHP链接方法

但是当我调用$ A-> getRealValue(30) - > asString(),它应该返回'30'作为字符串'。

谢谢

回答

6

所以当我调用$ A-> getRealValue(30),它应该返回30,但是当我调用$ A-> getRealValue(30) - > asString(),它应该返回“ 30'作为字符串'。

这是不可能的(yet)。当getRealValue返回一个标量值时,你不能调用它的方法。

除此之外,你的班对我来说毫无意义。你的方法被称为getRealValue,但它接受一个参数并且设置了的值。所以它应该被称为setRealValue。抛开一切方法,可能是你在寻找一个ValueObject?

class Numeric 
{ 
    private $value; 

    public function __construct($numericValue) 
    { 
     if (false === is_numeric($numericValue)) { 
      throw new InvalidArgumentException('Value must be numeric'); 
     } 
     $this->value = $numericValue; 
    } 

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

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

$fortyTwo = new Numeric(42); 
$integer = $fortyTwo->getValue(); // 42 
echo $fortyTwo; // "42" 
+0

其实他getRealValue返回这一点,这是一个对象。问题不在于 - > asString()调用,它可以工作。问题在于getRealValue()不返回int,而是返回一个对象。 – 2013-03-06 08:10:07

+0

@HugoDelsing我的初始陈述并不是指他的实际代码,而是引用的段落。 – Gordon 2013-03-06 08:22:49

+0

是的谢谢。基本上,我想从一些数组中获得一些值,但在此之后,我想改变字符串或其他类型的值。 – user2086527 2013-03-06 09:19:52

3

它不是真的,$ a-> getRealValue(30)将返回对象$ a没有值。但asString将以字符串格式返回值。

通常当你想要得到的东西这样你做:

$a->getRealValue(30)->get(); 
//Or 
$a->getRealValue(30)->getAsString(); 
+0

基本上我想从某个数组中获得一些值,但我想要将该值更改为字符串,例如。 //这将让我的ID $ A-> GET( '身份证') 所以beautier代码将是这样的: $ A-> GET( '身份证') - > asString( ); //它的酷我首先得到的ID后,转换它可以理解! 这是不可能的,所以最好的解决方案是什么: $ a-> afterConvert('string') - > get('id'); 这将工作,但它不是语义上的好。这是不可理解的。 有什么建议吗? – user2086527 2013-03-06 09:22:34