2011-03-27 3 views
2
class c{ 
    public $myV = &$_GET; 
} 

он дает мне ошибку :(Почему атрибут класса присваивается ссылкой не работает?

если я сделать простой простой:

$myV = &$_GET; 

это работает

+0

Зачем вам это нужно? Если это дает вам ошибку, возможно, это невозможно, и вы должны рассмотреть другой способ. Что ты хочешь делать? –

+0

Мне нужно установить $ myV либо $ _GET $ _POST, либо $ _COOKIE –

+0

И почему бы не передать его во время выполнения? –

ответ

4

Вы не можете даже сделать это:

public $x = $y; 

С руководство пользователя:

Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.

Чтобы обойти это, просто установите его в функции __construct.

public function __construct() 
{ 
    $this->myV = &$_GET; 
} 
+0

DAMN почему это .. – dynamic

+0

@ yes123, «почему» - это потому, что это значение свойства «жестко закодировано» в скрипте при анализе или «компиляции» времени. Если вы ссылаетесь на переменную, PHP не будет знать, что находится в ней до времени выполнения. Это решение для языкового дизайна; Я не могу ответить на вопрос, почему они так его проектировали, поскольку я не был частью этой дискуссии. – Matthew

1

Попробуйте это:

class c { 
    public $myV; 

    function c() { 
     $this->myV = &$_GET; 
    } 
} 

Вы не можете назначить переменные для полей перед классом экземпляра. Таким образом, ваша переменная будет установлена, когда объект будет создан из вашего класса.

2

... но эта инициализация должна быть постоянного значения - то есть, он должен быть способных оценить во время компиляции и не должен зависеть от времени выполнения информации для того, чтобы оценить ,

из php.net : Properties

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

1

Вы можете достичь такого же эффекта, как:

class c{ 
    public $myV; 
    function __construct() { $this->myV = &$_GET; } 
} 
Смежные вопросы