Что означает символ & (амперсанд) в этом случае?

Я новичок в php и mysql. Я следую учебнику от phpacademy на YouTube. Есть раздел с данными формы, но все, кто следовал руководству (включая меня), получили неопределенные ошибки индекса. Я исправил это с помощью символа & (амперсанд). Но что он делает в следующих обстоятельствах?? Почему установка символа & перед $ останавливает ошибку? Это то же самое, что и @, и он просто подавляет ошибку или действительно исправляет ее?

$submit = &$_POST['submit'];

person Ryan Sinclair    schedule 08.04.2012    source источник
comment
stackoverflow.com/ вопросы/3737139/   -  person Jürgen Paul    schedule 08.04.2012
comment
stackoverflow.com/questions/3526555/ и stackoverflow.com/questions/1367454 /   -  person Mike B    schedule 08.04.2012


Ответы (1)


Это означает, что вместо присвоения значения $submit присвойте ссылку на значение $submit.

Если вы знакомы с C и указателями, это похоже на указатель на значение, которое автоматически разыменовывается при доступе к нему. Однако PHP не позволяет выполнять арифметические операции с указателями или получать фактический адрес памяти (в отличие от C).

$a = 7;
$b = $a;
$c = &$a;
$c = 5;

echo $a, $b, $c; // 575

CodePad.

Чтобы остановить упомянутую вами ошибку, вы можете использовать такой шаблон, как...

$submit = isset($_POST['submit']) ? $_POST['submit'] : 'default_value';

...or...

$submit = filter_input(INPUT_POST, 'submit');
person alex    schedule 08.04.2012
comment
They are not like C pointers (php.net/manual/en/language.references.whatare. php) - person Gabriel Santos; 08.04.2012
comment
Итак, это хороший способ исправить ошибку неопределенного индекса? Я ничего не знаю ... хахаха - person Ryan Sinclair; 08.04.2012
comment
@RyanSinclair нет. Попробуйте $submit = isset($_POST['submit']) ? $_POST['submit'] : ''; - person Gabriel Santos; 08.04.2012
comment
@GabrielSantos Итак, вы не можете выполнить арифметику указателя или получить фактический адрес, но они в чем-то похожи. - person alex; 08.04.2012
comment
да. Я написал только для того, чтобы не запутать вопрос автора - person Gabriel Santos; 08.04.2012
comment
They are not like C pointers но it is like a pointer to the value that is automatically dereferenced when you access it. - person Gabriel Santos; 08.04.2012
comment
Я использовал $submit = filter_input(INPUT_POST, 'submit'); и это сработало. Не уверен, почему, но это работает! - person Ryan Sinclair; 08.04.2012
comment
Спасибо всем за быстрые и очень полезные советы! вы делаете изучение всего этого намного проще! - person Ryan Sinclair; 08.04.2012