Я пишу PHP: $someFunction = [$myObject, 'myMethod']; new ReflectionFunction($someFunction) И все грохается с ошибкой "ReflectionFunction::__construct() expects parameter 1 to be string, array given". На php 5.6 это работало, а на php 7.2 нет... Ну понятно что ввели строгую типизацию, но ведь этот способ через массив - единственный способ сослаться на метод объекта. P.S. ReflectionMethod не советовать. В конструктор может попасть и обычная функция - не метод.
Ожидается строка, ты шлеш массив. --- Добавлено --- https://php.ru/manual/reflectionfunction.construct.html
Все таки с методом на всякий случай Пример: PHP: $ReflectionMethod = new ReflectionMethod( 'mysqli_stmt', 'bind_param' ); $ReflectionMethod -> invokeArgs( $this -> lerma -> statement, $for ); --- Добавлено --- PHP: $someFunction = [$myObject, 'myMethod']; new ReflectionFunction( ...$someFunction )
Капитоша спешит на помощь? Ожидается строка или замыкание. По идее просто callable. --- Добавлено --- И что это за точки? Будет ошибка интерпретации...
Ты имеешь ввиду переменное количество аргументов? Я знаю. Но у тебя был написан именно вызов функции (конструктора), а не прототип. Я подумал что речь о распаковке массива в параметры как в питоне - такого в пыхе точно нет (к сожалению).
@Любитель котиков, на самом деле недавно появилось. https://php.net/manual/ru/functions.arguments.php#functions.variable-arg-list
Нет. Это переменное количество аргументов. Вот распаковка. Я уже давал эту ссылку черт побери. Впрочем какая разница как это называется. Тема не об этом.
Тем что в питоне я могу в эту функцию передать переменную массив и он распакуется при вызове в параметры. Там может быть даже не переменное количество аргументов и я все равно могу передать массив, даже с ключами и они распакуются в соответствующие переменные функции. Короче это сейчас перерастет в холивар пхп вс питон поэтому кончайте.
Случайно не вот этот код ? Код (Text): mas = [1, 2, 3, 4, 5] summ(*mas) #такой вызов эквивалентен вызову summ(1, 2, 3, 4, 5) Ну, если мы напишем PHP: $toSum = [1,2,3,4,5,6]; var_dump(catLoverFails(...$toSum)); То будет точно так же.
Решение я уже нашел - сделал проверку: если массив то юзаю ReflectionMethod предварительно распаковав его с помощью list, иначе ReflectionFunction. Тему можно закрыть.
Хмм, ну ок. Я не знал что так можно вызвать. --- Добавлено --- Это ужасно. А потом мучайся с необъявленными переменными. Нет. Не убеждайте меня. Я люто ненавижу пхп и пишу на нем только потому что вынужден. Я вообще сторонник статически типизируемых языков.
Не долго осталось и в пышке будет полная возможность к строгой типизации, я надеюсь. Во всяком случае уже сейчас на уровне ООП можно обмазаться строгостью чуть более чем полностью, правда существуют нюансы. isset в помощь. В любом случае, входные данные являются массивом и как вы его и где составляете это ваши проблемы.
нафиг так жить, если ты не в состоянии даже сообщение об ошибке перевести. Короче, первым делом translate.google.com потом дока. А на форум можешь забить, ты и так умный.))