Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

PHP7 "PHP message: PHP Fatal error: Uncaught Error: Function name must be a string in" : Программирование

29.03.2024 1:22


18.04.2017 17:51
OlegON
 
Код:
if (isset($tag_info['callback']))
{
$pending_text = $this->{$tag_info['callback']}($open['data'], $open['option']);
}
в третьей строке на PHP7 ошибка
Цитата:
PHP message: PHP Fatal error: Uncaught Error: Function name must be a string in
где?!
18.04.2017 18:15
twix
 
А если убрать фигурные скобки? Насколько я знаю, они используются для подстановки значения переменной внутрь строки, заключённой в двойные кавычки.

Цитата:
Простой синтаксис

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

Код:
<?php
$juice = "apple";

echo "He drank some $juice juice.".PHP_EOL;

// Не корректно. 's' - верный символ для имени переменной, но переменная имеет имя $juice.
echo "He drank some juice made of $juices.";

// Корректно. Строго указан конец имени переменной с помощью скобок:
echo "He drank some juice made of ${juice}s."
?>
Цитата:
Сложный (фигурный) синтаксис

Он называется сложным не потому, что труден в понимании, а потому что позволяет использовать сложные выражения.

Любая скалярная переменная, элемент массива или свойство объекта, отображаемое в строку, может быть представлена в строке этим синтаксисом. Просто запишите выражение так же, как и вне строки, а затем заключите его в { и } . Поскольку { не может быть экранирован, этот синтаксис будет распознаваться только когда $ следует непосредственно за {. Используйте {\$, чтобы напечатать {$. Несколько поясняющих примеров:
Код:
<?php
// Показываем все ошибки
error_reporting(E_ALL);

$great = 'здорово';

// Не работает, выводит: Это { здорово}
echo "Это { $great}";

// Работает, выводит: Это здорово
echo "Это {$great}";

// Работает
echo "Этот квадрат шириной {$square->width}00 сантиметров.";

// Работает, ключи, заключенные в кавычки, работают только с синтаксисом фигурных скобок
echo "Это работает: {$arr['key']}";

// Работает
echo "Это работает: {$arr[4][3]}";

// Это неверно по той же причине, что и $foo[bar] вне
// строки. Другими словами, это по-прежнему будет работать,
// но поскольку PHP сначала ищет константу foo, это вызовет
// ошибку уровня E_NOTICE (неопределенная константа).
echo "Это неправильно: {$arr[foo][3]}";

// Работает. При использовании многомерных массивов внутри
// строк всегда используйте фигурные скобки
echo "Это работает: {$arr['foo'][3]}";

// Работает.
echo "Это работает: " . $arr['foo'][3];

echo "Это тоже работает: {$obj->values[3]->name}";

echo "Это значение переменной по имени $name: {${$name}}";

echo "Это значение переменной по имени, которое возвращает функция getName(): {${getName()}}";

echo "Это значение переменной по имени, которое возвращает \$object->getName(): {${$object->getName()}}";

// Не работает, выводит: Это то, что возвращает getName(): {getName()}
echo "Это то, что возвращает getName(): {getName()}";
?>
18.04.2017 19:08
OlegON
 
Фигурные как раз в 7ке и требуются. Сейчас этот код работает, был и без фигурных, тоже работал. Поставил, все равно ошибка и не вижу в чем...

смотреть "Старая и новая оценка непрямых выражений", третья строка
18.04.2017 20:12
twix
 
А если сдампить $tag_info['callback'] прямо перед попыткой вызова метода? Может, там не стринг вовсе?
18.04.2017 20:14
OlegON
 
А как тогда сейчас работает? Но, да, сейчас попробую...
18.04.2017 20:42
twix
 
Цитата:
OlegON А как тогда сейчас работает?
А вот хрен его знает. Порой смотришь в код известных и популярных движков, и волосы на жопе шевелятся. Так что популярность не гарантирует чистоту кода и отсутствие костылей.
18.04.2017 20:48
OlegON
 
Да вот, нормально...

Цитата:
----
string(17) "handle_bbcode_url"

----
string(17) "handle_bbcode_url"

----
string(17) "handle_bbcode_url"

----
string(17) "handle_bbcode_url"

----
string(19) "handle_bbcode_quote"

----
string(19) "handle_bbcode_quote"

----
18.04.2017 20:58
twix
 
С типом переменной, значит, всё окей.
Вообще, почитал сейчас немного док, блогпостов и форумов, и, вроде, должно работать с этими фигурными скобками (как в первом посте).
Попробуй, кстати, не саму переменную дампить, а метод объекта $this с использованием фигурных скобок... в разных комбинациях.
18.04.2017 21:23
OlegON
 
В общем, теперь ошибок нет. Но и функции не работают :( :(
Видимо, в прошлый раз закешировалось что-то.
Может, где-то подавление ошибок? Как искать?
18.04.2017 22:26
OlegON
 
Цитата:
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in [path]/includes/visionscripts/psionic_hide/global_start.php on line 161
Благодаря twix'у нашли еще одну ошибку, завтра уже буду копать, валюсь с ног.
Часовой пояс GMT +3, время: 01:22.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.