在我的类(这实际上是一个CakePHP模型)我试图简单地设置一个变量,然后从函数内部访问它,但我得到以下错误:
解析错误:语法错误,意想不到的T_GLOBAL,期望T_FUNCTION在/path/to/file/file.php的第120行
从我的文件开始的第120行如下:
global $accessid = 'accessid';
global $secret = "secret";
global $b = 0;
global $m = 0;
function generateCredentials() {
global $accessid;
return $accessid;
}
你知道我哪里做错了吗?谢谢!
我猜这是在类定义中,如:
class Foo {
global $var;
}
你不能在那里使用这个关键字。惟一可以在类属性前面加上可见性声明var
、public
、protected
和private
的关键字。类属性始终是定义它们的类的属性,它们不能是全局变量。
如果你坚持,你可以在一个函数中从global
中获取它们,并将它们设置为属性:
class Foo {
public $var;
public function foo() {
global $var;
$this->var = $var;
}
}
这些都是非常丑陋的,特别是因为Cake提供了更好的工具来处理这些事情,比如Configure
类来全局注册值。
或者你可能只想创建简单的类属性:
class Foo {
public $accessid = 'accessid';
public $secret = "secret";
public $b = 0;
public $m = 0;
function generateCredentials() {
$this->accessid;
}
}
你的问题不完全清楚上下文是什么。
自由代码 (如果此代码是独立的)
不使用global
关键字来定义全局变量。只需在全局作用域中声明它们。
$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;
}
}
请注意,在后一个示例中需要指定成员可见性。看一下说明书
仅在类/函数内部没有global
。
PHP中的常量是全局的,例如:
define('ACCESSID', '123456');
// inside the function ACCESSID is now available
function generateCredentials() {
echo ACCESSID;
}
我建议这样做
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;
}