在PHP中链接的方法表现得很奇怪

时间:2014-04-29 04:19:18

标签: php

我已经在php中编写了一个函数,以了解方法链在php中是如何工作的。但它并没有向我显示任何输出。

我的代码是:

class sample {

function something($array) {

    $samples = array();
    foreach($array as $key=>$value) {

        $this->$key = $value;
        return $key;
    }
}
}

$hot = new sample();
$hot->something(array('maths'=>'12','science'=>'10'));

echo $hot->something()->maths;
?>

当我运行此代码时,我没有得到任何输出。我收到了Warning: Missing argument 1 for sample::something(), called in /web/com/13987442563085/main.php on line 22 and defined in /web/com/13987442563085/main.php on line 10 Warning: Invalid argument supplied for foreach()

之类的警​​告

我的预期输出是1

希望你们能帮助我找到正确的输出。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

试试

<?php
class sample {



  function something($array) {

$samples = array();
foreach($array as $key=>$value) {

 $this->$key = $value;
 return $value;
}
 }
}

$hot = new sample();
echo $hot->something(array('number'=>'1','subject'=>'maths'));
?>

答案 1 :(得分:0)

你的代码从正面到背面都没有多大意义。

您正在调用$hot->something()而没有任何参数 - 然后您想知道是否有错误信息告诉您这一点?

在foreach循环中使用return就像在第一次循环迭代中突破它(以及整个方法)。

你不能在这里“链接”任何东西(除了你想要的不是“方法链”,因为你不是在这里连续调用多个方法),因为你的方法没有返回值。如果您希望能够访问对象的属性,那么“方法调用的结果”(或调用其他方法,那么),则必须返回对象:

class Sample {
  function something($array) {
    foreach($array as $key=>$value) {
        $this->$key = $value;
    }
    return $this;
  }
}

$hot = new Sample();
echo $hot->something(array('maths'=>'12','science'=>'10'))->maths;

将输出12。 (它仍然没有多大意义。)