Нестатический метод RequestParamsMain :: buildFullURL () не должен вызываться статически

Я использую API etrade, который основан на множестве классов, которые статически вызывают множество функций. Следовательно, если я изменю это на «публичную статическую функцию», я просто буду продолжать получать эти ошибки. Вот полное сообщение об ошибке:

Нестатический метод RequestParamsMain :: buildFullURL () не следует вызывать статически, предполагая $ this из несовместимого контекста в /home/detroitclicks/public_html/etrade/Market/MarketClient.class.php в строке 72.

Вот код этой функции в классе Market. Класс RequestParamsMain находится в отдельном php-файле, который включен в этот файл:

public function productLookup($param_obj)
{

self::validateParamObj($param_obj,false);
$resourceURL = RequestParamsMain::buildFullURL(URL_PRODUCTLOOKUP,null,$param_obj);
return $this->getMarketResponse($resourceURL);

}

вот код, который я пытаюсь выполнить:

$request_params = new productLookupParams();
$request_params->__set('company', 'cisco'); // company = "cisco" for example
$request_params->__set('type', 'eq'); // type = equity for example
$out= $mc_obj->productLookup($request_params);

0

Решение

Проблема не в вашем коде, а в используемом вами API, потому что он вызывает нестатические методы (а именно RequestParamsMain::buildFullURL) статически. Этот вид вызова был разрешен в более старых версиях PHP и не генерировал предупреждающее сообщение, но в более новых версиях, таких как 5.4.

У вас есть несколько вариантов для рассмотрения:

  1. Ищите обновленную версию программного обеспечения 3-го участника, которое вы используете. Если вы не нашли его, выбросьте его в окно, потому что это кусок мусора, и его авторы вообще не поняли концепцию объектно-ориентированного программирования. Я бы предложил этот вариант, если есть альтернативы.

  2. Измените источник программного обеспечения 3-й стороны, которое вы используете. Я не рекомендовал бы это, потому что это может быть утомительной работой, и это может даже не соответствовать лицензированию.

    Обновить: Если это единственная ошибка в API, вы можете исправить ее, проверив, RequestParamsMain::buildFullURL используется полностью статически, и если да, сделайте это статическим методом. Если это действительно не статический метод, сделайте вызов нестатичным, создав объект из RequestParamsMain класс, например:

    $request = new RequestParamsMain(/* arguments */);
    $resourceURL = $request->buildFullURL(URL_PRODUCTLOOKUP,null,$param_obj);

    Однако, если есть несколько проблем, я бы не советовал их рассматривать, потому что это может быть огромный объем работы, а новая версия программного обеспечения может легко превзойти ваши результаты. В любом случае, отчет об ошибках для разработчиков может быть полезен во всех случаях.

  3. Очередь строгих предупреждений, чтобы скрыть эти сообщения об ошибках. Конечно, это не реальное решение, а просто обходной путь. Например.:

    error_reporting(E_ALL ^ E_STRICT);

0

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

По моему опыту с API etrade они все полны ошибок. Я полагаю, потому что в значительной степени они старые.

Их REST API документирован достаточно хорошо, но не идеально. Я бы посоветовал прокатиться самостоятельно. Чем больше библиотечных зависимостей вы можете удалить, тем лучше.

0

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