2013-02-25 54 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