2017-11-13 22 views
-1

私はこの状況をよく笑っています。それは巨大なアプリケーションでありますので、私はちょうどすべてをアップロードすることはできませんが、ここで私のコードの地元、関連する部分である:他では配列が神秘的にオブジェクトに変換されてからusort()がそれを見る直前

`` `

public function reallyCustomSort($thing, $options='') 
{ 
    die('dying. gettype results for our param: '.gettype($thing)); 
    //Gives us "array." So why does usort complain about "object given?" 
    die('dying. get_class results for our param: '.get_class($thing)); // Gives us "get_class() expects parameter 1 to be object, array given. 
    usort($thing, 'AppBundle\Twig\CustomSort::customCompare'); // Gives us "Warning: usort() expects parameter 1 to be array, object given" 
    die('We are done here.'); 
    return($thing); 
} 

public function someRandomFunction($thing){ 
    die('dying in someRandomFunction. gettype results for our param: '.gettype($thing)); //Gives us "array." 
} 

` ``

私の変数を解析する2つの関数呼び出しは、それが配列であることに同意し、その後、usort()関数はその変数にオブジェクトが含まれていると考えます。

誰もこの行動を以前に遭遇したことはありますか?もしそうなら、どうやって周りを回ったのですか?

私はすでに試したいくつかのこと

  • 睡眠を挿入()レース条件が関与しているかどうかを確認するために呼び出します。 (下記の 要点を参照してください。)運がない。 関数へ$thingの単なる通過変換を引き起こしていたいくつかの奇妙な理由のためだけに かどうかを確認するために別の関数に$thing変数を渡す

  • 。運がない。

  • アプリ内のさまざまなキャッシュをクリアします。運がない。

私が試したいくつかのより多くの(コメントアウト)のコードを示すものと要旨:SOに大きく基づいて、

https://gist.github.com/patrickmaynard/7c3c7f0695e223e6903fd729172b4c21

+0

何が起こっているのかわからないのは、そのコードの多くがコメントアウトされているためです。実際に重要な行だけを表示する例を提供できますか? – jaswrks

+0

参照:http://php.net/manual/en/language.references.pass.php〜作業中のデータが「参照」によって操作されていないことを確認してください。このような混乱を招く可能性があります。 – jaswrks

+0

'usort()'は '参照で'動作しますが、配列をオブジェクトに変換しないので、問題の原因とは思われません。 'usort()'を呼び出す前のどこかで起こっています。 – jaswrks

答えて

0

私はちょうどカスタム関数を記述することによって問題を回避ました、他の場所に答えてください。ここでは要点だ:

https://gist.github.com/patrickmaynard/922cf7cfa7533c655ec1c5eb4303345a

(私はソートてる配列はのgetName()メソッドを持っているそれぞれのオブジェクトの配列であり、この主旨でロジックが私のユースケースのために比較的うまく機能ので。それはおそらく他の人のためのいくつかの適応が必要になります)

====

編集:私は尊重する誰かがまた私の方法は、スタンドアロンのダイ()関数ではなかったことを意味しており、複数回呼び出されていたことに気づきましたそれをデバッグする最良の方法です。最初にアレイを受信して​​から、2回目または3回目にオブジェクトを受信して​​いました。したがって、上記の回避策が「機能する」一方で、後のメソッド呼び出しで渡されたオブジェクトの型を観察し、そのオブジェクトのtoArray()メソッドを使用することで、より洗練された解決策を見つけることができました。

関連する問題