PHP-意外全局,类中应为字符串
在我的类(实际上是一个CakePHP模型)中,我试图简单地设置一个变量,然后从函数内部访问它,但我得到以下错误: 分析错误:语法错误,意外的T_全局,第120行的/path/to/file/file.php中需要T_函数 我的文件第120行之后的内容如下:PHP-意外全局,类中应为字符串,php,cakephp,Php,Cakephp,在我的类(实际上是一个CakePHP模型)中,我试图简单地设置一个变量,然后从函数内部访问它,但我得到以下错误: 分析错误:语法错误,意外的T_全局,第120行的/path/to/file/file.php中需要T_函数 我的文件第120行之后的内容如下: global $accessid = 'accessid'; global $secret = "secret"; global $b = 0; global $m = 0; function generateCredentials() {
global $accessid = 'accessid';
global $secret = "secret";
global $b = 0;
global $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;
}
我猜这在类定义中,比如:
class Foo {
global $var;
}
你不能在那里使用这个关键字。在类属性前面可以使用的唯一关键字是可见性声明var
、public
、protected
和private
。类属性始终是定义它们的类的属性,它们不能是全局变量
如果您坚持,您可以从函数中的global
获取它们,并将它们设置为属性:
class Foo {
public $var;
public function foo() {
global $var;
$this->var = $var;
}
}
class Foo {
public $accessid = 'accessid';
public $secret = "secret";
public $b = 0;
public $m = 0;
function generateCredentials() {
$this->accessid;
}
}
但这一切都非常丑陋,特别是因为Cake为您提供了更好的工具来处理这些事情,比如全局注册值
或者您可能只想创建简单的类属性:
class Foo {
public $var;
public function foo() {
global $var;
$this->var = $var;
}
}
class Foo {
public $accessid = 'accessid';
public $secret = "secret";
public $b = 0;
public $m = 0;
function generateCredentials() {
$this->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;
}
胡说这是一个关键字,你可以在函数中使用它来将全局函数引入范围。常量是常量,不是全局变量。这是在
类{}
定义中吗?它确实在类中。感谢您的回答。如果我做了那个更改,我会得到以下错误:语法错误,意外的T_变量,在/var/www/html/bookmarklet/app/models/bookmarker.php中需要T_函数120@Probocop:我们没有您代码的上下文。我们不能在不知道之前和之后的情况下帮助你。你能提供一个完整的,最小的测试用例来重现错误吗?最值得注意的是,如果这在类定义中(请下次提供完整上下文!),则需要为变量指定访问级别。例如,public$accessid='accessid'代码>。请阅读。我已将此信息添加到我的答案中。感谢您的回答,您的最后一个示例对我很有用。我没有使用Configure类,因为这些变量只是这个特定模型中需要的变量。