PHP - неожиданный глобальный объект, ожидающий строку в классе - PullRequest
2 голосов
/ 06 апреля 2011

В моем классе (который на самом деле является моделью CakePHP) я пытаюсь просто установить переменную и затем получить к ней доступ изнутри функции, но получаю следующую ошибку:

Parseошибка: синтаксическая ошибка, неожиданный 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;
}

Есть идеи, где я иду не так?Спасибо!

Ответы [ 4 ]

8 голосов
/ 06 апреля 2011

Я предполагаю, что это в определении класса, например:

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;
    }

}
3 голосов
/ 06 апреля 2011

Из вашего вопроса не совсем понятно, что такое контекст.

Свободный код (Если этот код является автономным)

Вы не используете ключевое слово 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;
   }
}

Обратите внимание, что вынеобходимо указать элемент видимости в последнем примере.Взгляните на руководство .

0 голосов
/ 06 апреля 2011

Я бы предложил это

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;
}
0 голосов
/ 06 апреля 2011

Нет global только внутри классов / функций.

В PHP константы являются глобальными, пример:

define('ACCESSID', '123456');

// inside the function ACCESSID is now available
function generateCredentials() {    
    echo ACCESSID;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...