Есть ли функция для вызова массива?

В SomeClass есть f2member взять два целочисленных аргумента и вывести его сумму. Тест проходит, показывая, что вызов действительно работает и получает ожидаемый результат. Который звонит $gс двумя параметрами 1 а также 1 возврате 2,

Важно: это работает только для php 5.4.11 и выше проверка совместимости

class SomeClass extends PHPUnit_Framework_TestCase
{
function f2member($a,$b)
{
return $a + $b;
}

/**
* @test
*/
public function test()
{
$g = array($this,'f2member');
$this->assertEquals(2, $g(1,1)); // squiggle line under $g
}
}

Тем не менее, это вызывает предупреждение внутри phpStorm при каждом вызове метода и строку заглаживания под $g:

предупреждение о потоке строк в phpStorm

Имя функции должно быть вызываемым — строка, Закрытие или класс, реализующий __invoke, в настоящее время массив

Происхождение предупреждения мне ясно, и теперь я ищу способы избежать этих предупреждений.
Требование состоит в том, что я не хочу менять стиль вызова функции. Еще одна вещь, которую я не хочу делать, — отключить это предупреждение.
Я предпочел бы обернуть что-то вокруг этого, которое предоставляет необходимую информацию система типов.

Я уже столкнулся с несколькими решениями для удаления предупреждений. Одним из них является определение пользовательской функции, которая документирует только требуемый тип цели.

/**
* @param array $arr
*
* @return callable
*/
function callable_for($arr)
{
return $arr;
}

Это возвращает массив, но также явно сообщает системе типов, что выходит из callable_for функция. При наличии аннотации этого типа phpStorm теперь перестает жаловаться на это предупреждение, хотя все равно возвращает массив.

$g = callable_for(array($this,'f2member'));

Нет ли чего-нибудь из коробки, как мой callable_for в php этого добиться? Если ответ нет, то
Я ищу самое краткое решение, которое мы можем найти.

Я уже пытался смотреть на ТАК, php.net и гугл. Возможно, я просто искал неправильные словосочетания, вот только два примера:

  • массив для вызова php
  • создать вызываемый метод дескриптор php

На случай, если возникнут подозреваемые, это X / Y проблема: У меня есть другая функция, принимающая вызываемое в качестве параметра. С замыканиями очень естественно определить что-то, что может быть вызвано позже. Однако как определить вызываемый элемент или статический метод, не заключая его в другое делегирование Closure? Нотация массива позволяет использовать его для равномерной передачи: замыканий или дескрипторов статических методов / методов-членов в мою более позднюю функцию. Я сейчас пытаюсь найти краткое решение этого, которое приближается к этот.

0

Решение

Таким образом, еще одно улучшение может быть, чтобы изменить callable_for принять два аргумента и обернуть обе обязанности; создать массив и задокументировать целевой тип возвращаемого значения.

/**
* @param mixed $context
* @param string $method
*
* @return callable
*/
function callable_for($context, $method)
{
return array($context, $method);
}

Использование этой реализации повышает лаконичность $gдекларация на приемлемом уровне.

$g = callable_for($this,'f2member');

Эта функция по-прежнему возвращает массив, но система типов может использовать данную информацию, чтобы правильно обработать этот массив для динамического вызова метода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]