【问题标题】:Access a class within a function访问函数内的类
【发布时间】:2017-11-11 20:56:01
【问题描述】:

以here定义的类为例

class Testclass {
    private $testvar = "default value";
    public function setTestvar($testvar) { 
        $this->testvar = $testvar; 
    }
    public function getTestvar() { 
        return $this->testvar; 
    }
    function dosomething()
    {
        echo $this->getTestvar();
    }
}

$Testclass = new Testclass();
$Testclass->setTestvar("another value");
$Testclass->dosomething();

我想在函数内部添加“一个更多的值”,如下所示:

function test_function() {
    $Testclass->setTestvar("one more value");
}

但它不起作用。我给出了错误信息 undefined variable Testclass。为了使它工作,我必须在函数中将变量定义为全局变量,如下所示:

function test_function() {
    global Testclass;
    $Testclass->setTestvar("one more value");
}

我对 PHP 还是很陌生,但我觉得这种使用方式很奇怪。从主 PHP 文件中已经定义了它,但是当我从函数中使用它时,我必须再次定义。基本上我要做的是创建一个类,该类创建一个新文件并从不同的函数中添加字符串.没有更好的方法吗?有什么建议?提前谢谢了。

【问题讨论】:

标签: php


【解决方案1】:

一种方法是使用单例

MyClass::getInstance()->doSomethingUsefull();

有时你可以使用静态方法

MyClass::doIt();

【讨论】:

  • 感谢 Ivan 的快速回答!使用单例似乎是一个很好的方法,但我仍然遇到同样的问题。如果您能给我一些完整的代码示例,那将有很大帮助! (或者至少还有一些提示)
【解决方案2】:

函数有自己的私有变量范围。所以(例如)你可以在一个函数中使用$i,而不用担心它会在程序的其他地方搞砸另一个$i。如果你想让一个函数对一个已经存在的对象执行操作,只需将该对象作为参数传递给函数:

function test_function(Testclass $testclass)
{
    $testclass->setTestvar("one more value");
}

然后用你的对象调用它:

$Testclass = new Testclass();
test_function($Testclass);

注意:如果您在类外部定义的函数与该类紧密相关,那么您可能希望将它们定义为类内部的方法,而不是单独的独立函数。

【讨论】:

  • 谢谢Alex,我明白私有变量作用域的概念。我不担心在程序的其他地方搞砸另一个变量,恰恰相反。我想使用已经定义的同一个类。该类是一个日志文件。我创建了一个日志文件,然后向其中添加行。在主程序中它工作得很好,但是从函数内部我必须添加 Global 并再次定义变量,这对我来说看起来很奇怪。只是想知道是否有更好的方法。我虽然我的消息得到了很好的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2020-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多