2017-06-09 202 views
0

中的类使用作为一个例子类中定义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"); 
} 

但没有工作。我给出未定义的变量Testclass的错误消息。为了使它的工作,我必须定义函数内的变量作为全球性的,就像这样:

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

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

+1

请参阅[变量范围](http://php.net/manual/en/language.variables.scope.php)。 –

回答

0

的一种方法是使用单

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

有时你可以使用静态方法

MyClass :: doIt();

+0

谢谢伊万给你快速的回答!似乎很好的方式使用单身人士,但我仍然有使用它的相同问题。如果你能给我一些完整的代码示例,这将是非常有帮助的! (或至少几个提示) – LincolnP

0

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

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

然后用你的对象调用它:

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

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

+0

谢谢亚历克斯,我明白私人变量范围的概念。我并不担心在程序中的其他地方搞砸另一个变量,它恰恰相反。我想使用已经定义的同一个类。这个类是一个日志文件。我创建一个日志文件,然后添加行。从主程序来看,它的效果很好,但从函数内部我必须添加_Global_并再次定义变量,这对我来说看起来很奇怪。只是想知道是否有更好的方法。我虽然信息很好解释。 – LincolnP