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");
?>