0

多くの関数を静的に呼び出す多くのクラスに基づいて構築された etrade API を使用しています。したがって、「public static function」に変更すると、これらのエラーが発生し続けます。完全なエラー メッセージは次のとおりです。

非静的メソッド RequestParamsMain::buildFullURL() は、72 行目の /home/detroitclicks/public_html/etrade/Market/MarketClient.class.php の互換性のないコンテキストから $this を想定して、静的に呼び出すべきではありません

クラス 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);
4

2 に答える 2

0

RequestParamsMain::buildFullURL非静的メソッド (つまり) を静的に呼び出すため、問題はコードではなく、使用している API にあります。この種の呼び出しは、古いバージョンの PHP では許可されており、警告メッセージを生成しませんでしたが、5.4 などの新しいバージョンでは生成されます。

考慮すべきオプションがいくつかあります。

  1. 使用しているサードパーティ ソフトウェアの更新バージョンを探します。見つからない場合は、窓から投げ捨ててください。これはごみのかけらであり、その作成者はオブジェクト指向プログラミングの概念をまったく理解していませんでした。代替案がある場合は、このオプションをお勧めします。

  2. 使用しているサードパーティ ソフトウェアのソースを変更します。これは面倒な作業になる可能性があり、ライセンスに適合しない可能性があるため、お勧めしません。

    更新: API の単一のバグである場合は、RequestParamsMain::buildFullURLが完全に静的に使用されているかどうかを調べ、使用されている場合は静的メソッドにすることで修正できます。RequestParamsMain本当に静的メソッドでない場合は、クラスからオブジェクトを作成して呼び出しを非静的にします。次に例を示します。

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

    ただし、複数の問題がある場合は、それらすべてを調べることはお勧めしません。これは、膨大な量の作業が必要になる可能性があり、ソフトウェアの新しいバージョンが結果を簡単に消し去る可能性があるためです。いずれにせよ、開発者へのバグ報告はあらゆる場合に役立ちます。

  3. これらのエラー メッセージを非表示にするには、厳格な警告をオフにします。もちろん、それは本当の解決策ではなく、単なる回避策です。例えば:

    error_reporting(E_ALL ^ E_STRICT);

于 2014-11-16T23:13:12.547 に答える
0

etrade api の私の経験では、それらはすべてエラーでいっぱいです。大部分が古いからだと思います。

彼らの REST API は十分に文書化されていますが、完全ではありません。自分で巻くことをお勧めします。削除できるライブラリの依存関係が多いほど、より良い結果が得られます。

于 2015-08-19T00:02:37.023 に答える