2011-04-06 22 views
2

在我的類(其實是一個CakePHP模型)我試圖簡單地設置一個變量,然後從函數內部訪問它,但我得到以下錯誤:PHP - 意想不到的全球性,預計類中的字符串

解析錯誤:語法錯誤,意想不到的T_GLOBAL,上線預計在T_FUNCTION 120 /path/to/file/file.php

120行開始我的文件如下:

global $accessid = 'accessid'; 
global $secret = "secret"; 
global $b = 0; 
global $m = 0; 

function generateCredentials() {  
    global $accessid; 

    return $accessid; 
} 

任何想法我哪裏錯了? 謝謝!

+0

這是一個'類{}'定義裏面? – deceze 2011-04-06 08:54:59

+0

這確實是在一個班級。 – Probocop 2011-04-06 08:59:28

回答

8

我想這是一個類定義內等:

class Foo { 
    global $var; 
} 

不能使用此關鍵字存在。您可以在類屬性之前使用的唯一關鍵字是可見性聲明var,publicprotectedprivate。類屬性總是屬於它們定義的類的屬性,它們不能是全局變量。

如果你堅持,你可以從global一個函數中得到它們,並將它們設置爲屬性:

class Foo { 
    public $var; 

    public function foo() { 
     global $var; 
     $this->var = $var; 
    } 
} 

這都是極其難看雖然,尤其是蛋糕爲您提供更好的工具來處理這些事情,如Configure class全球註冊價值。

或者你可能只是想創建簡單的類屬性:

class Foo { 

    public $accessid = 'accessid'; 
    public $secret = "secret"; 
    public $b = 0; 
    public $m = 0; 

    function generateCredentials() {  
     $this->accessid; 
    } 

} 
+0

感謝您的回答,您的最後一個例子對我有好處。我沒有使用Configure類,因爲這些變量只是這個特定模型中需要的變量。 – Probocop 2011-04-06 09:23:27

3

從你的問題來看,情況並不完全清楚。

免費代碼(如果這個代碼是獨立的)

不要使用the global keyword定義全局。只需在the global scope中聲明它們。

$accessid = 'accessid'; 
$secret = "secret"; 
$b = 0; 
$m = 0; 

function generateCredentials() {  
    global $accessid; 

    return $accessid; 
} 

類成員(如果你的代碼是一個類定義中找到)

如果您希望能夠從一個類的內部訪問全局變量:

$accessid = 'accessid'; 
$secret = "secret"; 
$b = 0; 
$m = 0; 

class X { 
    function generateCredentials() {  
     global $accessid; 

     return $accessid; 
    } 
} 

或者如果你想要班級成員,而不是全球人:

class X { 
    public $accessid = 'accessid'; 
    public $secret = "secret"; 
    public $b = 0; 
    public $m = 0; 

    function generateCredentials() { 
     return $accessid; 
    } 
} 

請注意,您需要在後面的示例中指定成員可見性。看看the manual

+0

感謝您的回覆。如果我做了這個改變,我會得到以下錯誤:解析錯誤:語法錯誤,意外的T_VARIABLE,期待T_FUNCTION在/var/www/html/bookmarklet/app/models/bookmarker.php 120行 – Probocop 2011-04-06 09:02:52

+0

@Probocop:我們沒有您的代碼的上下文。如果不知道前後是什麼,我們無法幫助你。你能提供一個_complete,minimal_ testcase來重現錯誤嗎?最值得注意的是,如果這是在類定義中(請在下次提供完整的上下文!),您需要爲變量指定訪問級別。例如,'public $ accessid ='accessid';'。請閱讀[手冊](http://www.php.net/manual/en/language.oop5.visibility.php)。我已將這些信息添加到我的答案中。 – 2011-04-06 09:03:41

0

只有在類/函數內部沒有global

在PHP常量是全球性的,例如:

define('ACCESSID', '123456'); 

// inside the function ACCESSID is now available 
function generateCredentials() {  
    echo ACCESSID; 
} 
+0

廢話。這是一個關鍵字,您可以在函數中使用它來使全局變爲範圍。常量是常量,而不是全局變量。 – 2011-04-06 08:54:25

+0

請給我看在類定義中使用的'global'。 – 2011-04-06 09:10:26

0

我建議這個

private $accessid; 
private $secret; 
private $b; 
private $m; 

function generateCredentials() {  
    global $accessid; 
    global $secret; 
    global $b; 
    global $m; 

    $this->accessid = $accessid; 
    $this->secret = $secret; 
    $this->b = $b; 
    $this->m = $m; 

    return $accessid; 
} 
相關問題