2017-06-09 198 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