首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >访问(返回)来自类内私有函数中的变量

访问(返回)来自类内私有函数中的变量
EN

Stack Overflow用户
提问于 2011-12-03 00:28:09
回答 4查看 87关注 0票数 2

我有这样的类,我想把变量放在外面(我猜是返回),这样我就能用它做点什么了。

代码语言:javascript
代码运行次数:0
运行
复制
    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';

在类内部回显私有函数中的变量是可行的,但是在外部回显变量就不行了。注释掉的代码是我想要达到的效果。我没有做这个类,所以我不想弄乱它,也不想改变它里面的任何东西,因为我担心它会把事情搞砸。

这是我的输出:

代码语言:javascript
代码运行次数:0
运行
复制
SomeVar is echoed from inside
is echoed from outside

如您所见,在第二个实例中没有SomeVar(变量)。不过,我很惊讶它还能工作。在过去的两天里,我一直在网上阅读文档和教程,但这个问题需要尽快解决,这就是为什么我发了这篇文章。请帮帮忙。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-03 00:31:49

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

代码语言:javascript
代码运行次数:0
运行
复制
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';
票数 4
EN

Stack Overflow用户

发布于 2011-12-03 00:42:01

你确实应该在你的类中显式声明你的变量。此外,没有理由担心从不同的函数返回行-只需使其成为您的类的成员,将其可见性设置为public,并在您的类内外访问它。

看起来您还混淆了函数中的局部变量和类成员变量。您必须始终使用$this->来访问该类的成员。

代码语言:javascript
代码运行次数:0
运行
复制
<?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.';
票数 1
EN

Stack Overflow用户

发布于 2011-12-03 00:32:44

你可以这样做:

代码语言:javascript
代码运行次数: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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8359431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档