在类中的私有函数中访问(返回)变量

时间:2011-12-02 16:28:09

标签: php

我有这种类,我想把变量带到外面(我想回来),这样我就可以用它来做。

    class MyClass{

        private function MyPrivate(){
            $rows = 'SomeVar';
            echo $rows.' is echoed from inside';
            //return $rows;
            return $this->rows;
        }

        function Foo(){
            $this->MyPrivate();
            //$this->rows;
        }
    //return $rows;
    //return $this->rows;
    }

    $myclass = new MyClass;
    $myclass->Foo();

    //$myclass->rows;

    echo '<br />';

    echo $rows.'is echoed from outside';

类中私有函数内部的回声变量有效,但外部回显变量不起作用。注释掉的代码就是我试图用来实现想要的结果的代码。我没有上这堂课,所以我不想搞砸它并改变其中的任何内容,因为我担心它可能搞砸了。

这是我的出局:

SomeVar is echoed from inside
is echoed from outside

正如您在第二个实例中看到的,没有SomeVar(变量)存在。我很惊讶它正在工作。 我正在阅读过去两天在网上的文档和教程,但这需要尽快解决,这就是我发布的原因。请帮忙。感谢。

4 个答案:

答案 0 :(得分:4)

使用return语句时,应将其分配给变量。此外,您应该返回$rows,而不是$this->rows,因为它们实际上是不同的变量:

class MyClass{

    private function MyPrivate(){
        $rows = 'SomeVar';
        echo $rows.' is echoed from inside';
        return $rows;
    }

    function Foo(){
        return $this->MyPrivate();
    }
}

$myclass = new MyClass;
$rows = $myclass->Foo();

echo '<br />';

echo $rows.'is echoed from outside';

答案 1 :(得分:1)

你真的应该在你的类中明确声明你的变量。此外,没有理由担心从不同的功能中返回行 - 只需将其设为您的班级成员,将其设置为公开,并在班级内外访问它。

看起来你在函数和类成员变量中的局部变量之间也感到困惑。您必须始终使用$this->来访问该班级的成员。

<?php
class MyClass
{
    public $rows;

    private function MyPrivate()
    {
        $this->rows = "Low-level programming is good for the programmer's soul --J. Carmack";
        echo $this->rows . ' is echoed from inside';
    }

    function Foo()
    {
        $this->MyPrivate();
    }
}

$obj = new MyClass;
$obj->Foo();

echo $obj->rows . ' is echoed from outside.';

答案 2 :(得分:0)

你可以这样做:

class MyClass{

    private function MyPrivate(){
        $rows = 'SomeVar';
        echo $rows.' is echoed from inside';
        //return $rows;
        return $rows;
    }

    function Foo(){
        return $this->MyPrivate();
        //$this->rows;
    }
//return $rows;
//return $this->rows;
}

$myclass = new MyClass;
$rows = $myclass->Foo();

//$myclass->rows;

echo '<br />';

echo $rows.'is echoed from outside';

这里的键盘:http://codepad.org/8rr1hfI3

答案 3 :(得分:0)

尝试将$ rows设置为成员var:

class MyClass
{
    public $rows;

    private function myPrivate()
    {
        $this->rows = 1;
    }

    function Foo(){
        $this->MyPrivate();
    }
}

$myclass = new MyClass();

$myclass->foo();

$rows = $myclass->rows;