500 - Внутренняя ошибка сервера с дополнительной парой скобок

Я искал ошибку в моем коде с часа. Это была ошибка:

Пишу:

if(isset(($_POST['to'])))

вместо

if(isset($_POST['to']))

Я не понимаю, почему эта дополнительная пара скобок вызывает внутреннюю ошибку сервера.

Я не думаю, что квадратные скобки вокруг переменной никогда не меняют ее значения. Я имею в виду,

$a = $b;
$c = ($b);

$a==$c; //True

Мне любопытно узнать, почему это ошибка?

Спасибо.

РЕДАКТИРОВАТЬ:

Вышеуказанная ошибка произошла и для нормальной переменной.

4 ответа

Решение

Это потому что isset не функция, а языковая конструкция; как таковое, его определение можно найти в синтаксическом анализаторе языка.

T_ISSET '(' isset_variables ')' { $$ = $3; }

Ожидается только одна пара скобок; передача другой пары вызовет ошибку разбора.

Я уверен, что это как-то связано с тем, что isset не может принимать функцию в параметре. Вы должны передать это значение. Ваша лишняя пара скобок может быть оценена как "функция" или что-то, что должно быть оценено.

Обычно, когда вы пытаетесь передать функцию в isset, вы получаете эту ошибку:

Can't use method return value in write context

Исеть:

Предупреждение

isset() работает только с переменными, поскольку передача чего-либо еще приведет к ошибке разбора. Для проверки, установлены ли константы, используйте функцию define ().

Информация может быть передана в функции через аргументы. Аргумент похож на переменную.

Аргументы указываются после имени функции в скобках. Вы можете добавить столько аргументов, сколько захотите, просто разделите их запятой.

В следующем примере есть функция с одним аргументом ($fname). Когда вызывается функция familyName(), мы также передаем имя (например, Jani), и имя используется внутри функции, которая выводит несколько разных имен, но одинаковую фамилию:

<?php
function familyName($fname)
{
echo "$fname Refsnes.<br>";
}

familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai Jim");
familyName("Borge");
?>
Другие вопросы по тегам