2014-03-01 292 views
0

稍後我會解釋這一點:全局變量

class num 
{ 
    function num1() 
    { 
     global $error; 
     $error="This is an error message"; 
     return false; 
    } 

    function num2() 
    { 
     global $error; 
     return $error; 
    } 
} 

$num=new num(); 
$check=$num->num1(); 
if($check===false) $error.="There is another error message"; 

die($error);//This is an error messageThere is another error message 

在功能num1$error影響$error類外。有關如何防止這種情況的任何建議?

+0

您錯過了分號,在返回虛假陳述結束 – Sandesh

+0

謝謝,但這不是我想要得到的答案:D但是,謝謝。 – 131

+0

我想它是因爲你使用全局。停止它,它不會影響對象外部的$錯誤。 –

回答

1

你應該使用對象的字段(屬性):

class num 
{ 
    protected $error; 

    public function num1() 
    { 
     $this->error = "This is an error message"; 
     return false; 
    } 

    public function num2() 
    { 
     return $this->error; 
    } 
} 

$num = new num(); 
$check = $num->num1(); 
if ($check===false) { 
    // $error is just local variable, not defined before 
    $error .= "There is another error message"; 

    // $objError is the error message from object 
    $objError = $num->num2(); 
} 

全局變量是反模式。面向對象的一個​​原理是封裝。你不想公開$ error變量,除非有一個方法(契約)返回它。這正是你可以用私人或受保護的資產做的事情。

我推薦你讀一些這樣的:http://www.php.net/manual/en/language.oop5.php

另外,還要考慮尤爲明顯類,方法和變量名。 num1num2是你可能選擇的最差的一個。但我明白這是一個例子。

+0

謝謝,這工作!我終於可以擺脫所有功能中的'global $ error':-D – 131

+1

如果這對你來說是新的(它有幫助),你應該*閱讀一些OOP的基礎知識(我發佈的鏈接)。這將爲你打開一個新的世界。不用謝。 –

+0

我會的,謝謝。 PHP對我來說就像宇宙,它是無限的! – 131