2013-02-25 72 views
-3

遇到一個問題,我的代碼在Apache運行時運行良好,但是當我通過CLI運行代碼時,它無法看到此變量$ jobID。有什麼想法嗎?全局變量在PHP中不起作用CLI

PS。請不要上學我不使用全局變量。

編輯:

這並不工作:

$jobID = mysql_insert_id(); 

function someFunction() { 
    global $jobID; 
    echo $jobID; 
} 

這並不:

$jobID = mysql_insert_id(); 

function someFunction($jobID) { 
    echo $jobID; 
} 

固定 使用Register Globals:此功能已被棄用的PHP 5.3.0的並從PHP 5.4.0起移除。 http://php.net/manual/en/security.globals.php

+2

從本身的代碼片段,這是不可能告訴什麼可能是錯誤的。儘管Globals在CLI和其他地方的表現都一樣。 – deceze 2013-02-25 20:25:23

+0

你的代碼是做什麼的?你認爲它應該做什麼? – Oswald 2013-02-25 20:25:51

+0

它增加了一條線到數據庫,簡單地說,當我調用這個函數$ jobID已經設置,所以它應該看到它(並與Apache),但從CLI它沒有看到它。有沒有在php.ini中的選項?什麼與反對票? – amof 2013-02-25 20:27:51

回答

3

這可能是:

$GLOBALS['jobID'] = 12; 

//Thats the way to initialize the var...and in the function: 

function someFunction() { 
    echo $GLOBALS['jobID']; 
} 

someFunction(); //testing 

Saludos;)

+0

感謝羅伯特這工作,任何想法爲什麼全局關鍵字不工作在CLI? – amof 2013-02-25 20:49:55

+0

不是很多....我從來沒有做一個在CLI上工作的PHP應用程序,但全球範圍內存在任何範圍,因爲它的超全球;) – Hackerman 2013-02-25 21:00:02

+2

PHP沒有全局變量。它具有全球範圍。在任何函數或回調之外聲明的變量隱含在那裏。當原始賦值'$ jobID = 12;'發生在任何函數/方法中時,它就駐留在本地範圍內(除非使用'global'關鍵字)。這是OP發生的事情,但不會放過。 – mario 2013-02-25 21:02:21

0

不要用全球性的,函數調用,因爲[see this],例如通過你的論點: 變化:

function someFunction() { 
    global $jobID; 
    echo $jobID; 
} 

到:

function someFunction($arg1) { 
    echo $arg1; 
} 
$anyvar = 'some value'; 
someFunction($anyvar); 
+0

它不是一個真正的選項,我沒有使用類,函數有另外10個參數,我不想傳遞$ jobID作爲參數的原因有很多。 – amof 2013-02-25 20:30:13

0

PHP店的命令行參數$ argv數組,而不是將參數展開爲普通變量。這種擴展是舊PHP版本經常使用的不良行爲,所以不要使用它,而是使用$ argv數組來訪問參數。

+0

它不是$ argv數組,它的一個變量在腳本中被刪除 – amof 2013-02-25 20:34:49