Если, как и я, вы пытались расположить элемент над другим элементом, плавающий элемент должен находиться внутри другого, а не как братьев и сестер. Теперь ваша позиция: absolute;
может работать!
Вы должны указывать вызов по ссылке в определении функции, а не на фактический вызов. Поскольку PHP начал показывать ошибки устаревания в версии 5.3, я бы сказал, что было бы неплохо переписать код.
В вызове функции нет ссылочного знака - только для определения функций. Определений функций достаточно, чтобы правильно передать аргумент по ссылке. Начиная с PHP 5.3.0 вы получите предупреждение о том, что «call-by-reference-ссылка» устарела, когда вы используете
blockquote>&
вfoo(&$a);
.Например , вместо использования:
// Wrong way! myFunc(&$arg); # Deprecated pass-by-reference argument function myFunc($arg) { }
Использование:
// Right way! myFunc($var); # pass-by-value argument function myFunc(&$arg) { }
PHP и ссылки несколько неинтуитивны. Если использовать соответствующие ссылки в правильных местах, это может обеспечить большие улучшения производительности или избежать очень уродливых обходных решений и необычного кода.
Следующее приведет к ошибке:
function f(&$v){$v = true;}
f(&$v);
function f($v){$v = true;}
f(&$v);
Ни у кого из них нет чтобы они могли следовать приведенным ниже правилам, но, без сомнения, были удалены или отключены, чтобы предотвратить много путаницы.
Если они действительно работали, оба включают избыточное преобразование в ссылку, а второе также включает в себя избыточное преобразование обратно в облачную содержащуюся переменную.
Второй вариант был возможен, позволяя передавать ссылку на код, который не предназначен для работы со ссылками. Это крайне уродливо для ремонтопригодности.
Это ничего не сделает:
function f($v){$v = true;}
$r = &$v;
f($r);
В частности, он возвращает ссылку обратно в обычную переменную, поскольку вы не запрашивали ссылку.
Это будет работать:
function f(&$v){$v = true;}
f($v);
Это означает, что вы передаете ссылку без ссылки, но хотите получить ссылку, поэтому она превращается в ссылку.
Что это означает, что вы не можете передать ссылку на функцию, в которой ссылка явно не указана для того, чтобы сделать ее одной из немногих областей, где PHP является строгим при передаче типов или в этом случае больше мета-типа.
Если вам нужно больше динамического поведения, это будет работать:
function f(&$v){$v = true;}
$v = array(false,false,false);
$r = &$v[1];
f($r);
Здесь он видит, что вы хотите ссылку и уже имеете ссылку, поэтому оставите ее в покое. Он может также связывать ссылку, но я в этом сомневаюсь.
Для тех, кто, как и я, читает это, потому что им нужно обновить гигантский проект наследия до 5.6: как показывают ответы здесь, нет быстрого решения: вам действительно нужно найти каждое возникновение проблемы вручную, и исправить.
Самый удобный способ найти все проблемные строки в проекте (не используя полномасштабный статический анализатор кода, который очень точен, но я не знаю никого, что приведет вас к правильному позиция в редакторе сразу) использовала Visual Studio Code, в которой есть хороший PHP-интерфейс, и его функция поиска, которая позволяет искать в Regex. (Конечно, вы можете использовать любой редактор IDE / Code для этого, который выполняет поиск PHP и поиск в Regex.)
С помощью этого регулярного выражения:
^(?!.*function).*(\&\$)
можно выполнить поиск проекта для всей сети &$
только в строках, которые не являются определением функции.
Это все еще вызывает много ложных срабатываний, но это облегчает работу.
Браузер результатов поиска VSCode делает прохождение и поиск оскорбительных линий очень просто: вы просто щелкните через каждый результат, и обратите внимание на те, которые linter подчеркивает красный. Те, которые вам нужно исправить.
(?<!function)[:> ][a-zA-Z0-9_]+(?<!foreach|array)\s?\([^()]*&\$
– Mojo
4 April 2017 в 06:45
E_COMPILE_WARNING
, для справки: php.net/manual/en/… – hakre 28 June 2012 в 23:20