php oo:为什么这段代码只打印第一个对象?

时间:2012-09-01 13:15:17

标签: php oop

<?php
//firt class of eitay

class hello
    {
        //hello word.
        public $first = 'hello world';

        public function first_method()
        {
            $a = 1;
            $b = 2;
            $c = $a + $b;
            return $c;
            return $this->first;
        }
    }

    $momo = new hello();
    print $momo->first_method();

5 个答案:

答案 0 :(得分:3)

它只打印$c,因为该函数在此之后返回。当你返回一个函数(在这种情况下你是return $c)时,它将停止执行并返回到调用函数。

答案 1 :(得分:3)

方法只返回一次并立即返回。多个返回语句是多余的,因为只执行第一个语句。

如果要返回多个结果,可以使用关联数组:

return array(
    "result" => $my_result,
    "time" => $end_time - $start_time
);

答案 2 :(得分:0)

它应该打印3,因为第一个return退出该函数,输出为$c,其值为3

答案 3 :(得分:0)

http://php.net/manual/en/function.return.php

  

如果在函数内调用,则立即返回语句   结束当前函数的执行,并将其参数作为   函数调用的值。 return也将结束执行   一个eval()语句或脚本文件。

     

如果从全局范围调用,则执行当前脚本   文件已结束。如果包含或需要当前脚本文件,   然后将控制权传递回调用文件。而且,如果   包含当前脚本文件,然后返回给予的值   作为包含调用的值返回。如果从中调用return   在主脚本文件中,脚本执行结束。如果   当前脚本文件由auto_prepend_file或   php.ini中的auto_append_file配置选项,然后是该脚本   文件的执行结束。

因此不可能发生这种情况 进行测试:http://ideone.com/HhzQa

答案 4 :(得分:0)

正如其他人所说,php正在返回它看到的第一个返回。

我还要问你为什么不把这个方法当成一个对象&amp;更多功能的封装。

如果要在方法中创建多个值,只需将它们分配给具有$this的对象范围,那么只要该属性是公共的(默认为公共),您就可以从类外部访问该属性,这里是一个例子:

<?php 
class hello{
    public $first = 'hello world';

    function first_method(){
        $this->a = 1;
        $this->b = 2;
        $this->c = $this->a + $this->b;
    }

    function add_more($key, $value){
        $this->$key += $value;
    }
}

$momo = new hello();

$momo->first_method();

echo $momo->first; //hello world
echo $momo->a; //1
echo $momo->b; //2
echo $momo->c; //3

//Alter the propery with a method
$momo->add_more('a', 5); //1+5=6
$momo->add_more('b', 53);//2+53=55
echo $momo->a;//6
echo $momo->b;//55
?>

传递数组不是oop。