Notice: Array to string conversion in Notice: Undefined property: PanelGenerator::$Array in Fatal error: Uncaught Error: Function name must be a string in указывается строка PHP: $out .= $this->$option['type']( $option ); используется эта строка в foreach var_dump( $options ); var_dump( $option ); показывает что данные не пустые PHP: foreach( $options as $option ) { $out .= $this->$option['type']( $option ); } в PHP5 все работает отлично
@tyshka, не знаю почему работало в php 5, но заключается в фигурные скобки для обработки значения массива. Т.е. выше без скобок тебе передавался массив, а заключив в фигурные скобки переменная обработалась как надо, в итоге получил переменную. Это сложный синтаксис обработки переменных. --- Добавлено --- http://php.net/manual/ru/language.types.string - пункт "обработка переменных".
@tyshka в PHP7 изменён парсер в целях ускорения. Теперь переменная разбирается строго слева направо. Таким образом, получается $this - объект, $option - имя свойства объекта, ['type'] - элемент массива в свойстве, () - вызов функции с именем-строкой из этого элемента массива объекта. Поскольку option - это массив, по правилам приведения типов он превращается в слово Array с выбрасыванием ошибки. У $this нет такого свойства нет, соответственно имя функции оказывается null и получается Fatal. Подробно в доке http://bit.ly/2inWjSy Теперь надо привыкать к следующей логике: PHP: class MyClass { public $names = ['One' => 'Fn']; public function run($arrName) { $this->$arrName['One'](); } } function Fn() { echo 'Bingo!'; } $o = new MyClass; $o->run('names'); --- Добавлено --- В PHP 5 будет
@mahmuzar мне кажется, этот пример воспроизводит ситуацию ТС. На PHP5 в фнукцию run() можно передать массив ['One'=>'Fn'] и ожидать, что это приведет к вызову $this->fn().
@[vs], просто fn() вне класса. --- Добавлено --- @[vs],@denis01, теперь понял, до меня не сразу дошло, что ты предполагал.
Как это побороть? Ошибки PHP Notice: Array to string conversion in В коде Код (Text): <a href="<?php echo ${'sort_' . $field}; ?>" class="<?php echo ($sort == ${'sort_' . $field}) ? strtolower($order) : ''; ?>" title="<?php echo ${'text_' . $field}; ?>"><i class="fa fa-image fa-2x"></i></a> и В коде Код (Text): <a href="<?php echo ${'sort_' . $field}; ?>" class="<?php echo ($sort == ${'sort_' . $field}) ? strtolower($order) : ''; ?>"><?php echo ${'text_' . $field}; ?></a>