Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-意外全局,类中应为字符串_Php_Cakephp - Fatal编程技术网

PHP-意外全局,类中应为字符串

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() {

在我的类(实际上是一个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;

    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类,因为这些变量只是这个特定模型中需要的变量。