Я использую 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);
Проблема не в вашем коде, а в используемом вами API, потому что он вызывает нестатические методы (а именно RequestParamsMain::buildFullURL
) статически. Этот вид вызова был разрешен в более старых версиях PHP и не генерировал предупреждающее сообщение, но в более новых версиях, таких как 5.4.
У вас есть несколько вариантов для рассмотрения:
Ищите обновленную версию программного обеспечения 3-го участника, которое вы используете. Если вы не нашли его, выбросьте его в окно, потому что это кусок мусора, и его авторы вообще не поняли концепцию объектно-ориентированного программирования. Я бы предложил этот вариант, если есть альтернативы.
Измените источник программного обеспечения 3-й стороны, которое вы используете. Я не рекомендовал бы это, потому что это может быть утомительной работой, и это может даже не соответствовать лицензированию.
Обновить: Если это единственная ошибка в API, вы можете исправить ее, проверив, RequestParamsMain::buildFullURL
используется полностью статически, и если да, сделайте это статическим методом. Если это действительно не статический метод, сделайте вызов нестатичным, создав объект из RequestParamsMain
класс, например:
$request = new RequestParamsMain(/* arguments */);
$resourceURL = $request->buildFullURL(URL_PRODUCTLOOKUP,null,$param_obj);
Однако, если есть несколько проблем, я бы не советовал их рассматривать, потому что это может быть огромный объем работы, а новая версия программного обеспечения может легко превзойти ваши результаты. В любом случае, отчет об ошибках для разработчиков может быть полезен во всех случаях.
Очередь строгих предупреждений, чтобы скрыть эти сообщения об ошибках. Конечно, это не реальное решение, а просто обходной путь. Например.:
error_reporting(E_ALL ^ E_STRICT);
По моему опыту с API etrade они все полны ошибок. Я полагаю, потому что в значительной степени они старые.
Их REST API документирован достаточно хорошо, но не идеально. Я бы посоветовал прокатиться самостоятельно. Чем больше библиотечных зависимостей вы можете удалить, тем лучше.