0

基本的に、私はこのソースコードを読んでいますが、特定の領域の目的を理解していません。

class URL_Processor
{
    private static $urlPath;
    private static $urlBits = array();

    /*
Gets data from the current URL
@return Void
*/
public function getURLData()
{
    $urldata = (isset($_GET['page'])) ? $_GET['page'] : '' ;
    self::$urlPath = $urldata;
    if( $urldata == '' )
    {
        self::$urlBits[] = 'home';
        self::$urlPath = 'home';
    }
    else
    {
        $data = explode( '/', $urldata );
        while ( !empty( $data ) && strlen( reset( $data ) ) === 0 ) 
        {
            array_shift( $data );
        }
        while ( !empty( $data ) && strlen( end( $data ) ) === 0) 
        {
            array_pop($data);
        }
            self::$urlBits = $this->array_trim( $data );
        }
    }

   private function array_trim( $array ) 
   {
        while ( ! empty( $array ) && strlen( reset( $array ) ) === 0) 
        {
            array_shift( $array );
        }

        while ( !empty( $array ) && strlen( end( $array ) ) === 0) 
        {
            array_pop( $array );
        }

        return $array;
    }
}

したがって、基本的には、getURLData メソッドで 'array_shift' を使用した 2 つの while ループを理解すると、配列が空になりますが、私の論理によれば、最初の while ループが既に実行されているため、2 番目の while ループは何も空にすることさえできません。

次に、メソッド getURLData の最後の行

self::$urlBits = $this->array_trim( $data );

同じことをしますが、渡された引数がすでに空の場合はどうなりますか?

非常に混乱!!!

4

1 に答える 1

1

最初の while ループは、文字列の長さがゼロである配列内のすべての先行要素を削除します。2 番目のループは、後続の要素に対して同じことを行います。reset($array) は最初の要素を指し、 end($array) は最後の要素を指します。

なぜ彼はそれを二度目につぶすのですか?知らない。

于 2013-08-13T01:29:56.910 に答える