成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

學(xué)習(xí) PHP 程序新東西的另一種方法

henry14 / 1837人閱讀

昨天在學(xué)習(xí) SplDoublyLinkedList 的時(shí)候發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,比如

php$obj = new SplDoublyLinkedList();
$obj->push("string");

這時(shí)候想判斷 $obj 里面到底有沒(méi)有值,或是不是一個(gè),并且里面的值為 "string",我們通常會(huì):

phpprint_r($obj);

然后通過(guò)肉眼去看打印出來(lái)的,確實(shí)與我們想的一致,那么我們就會(huì)認(rèn)為是成功的。如果不一致就會(huì)認(rèn)為是失敗的。

仔細(xì)想想,這種與我們要做的測(cè)試程序不是一模一樣嘛,只不過(guò)測(cè)試程序是用來(lái)檢測(cè)我們的代碼有沒(méi)有問(wèn)題,但現(xiàn)在由于代碼是 PHP 官網(wǎng)這種權(quán)威組織寫(xiě)的,我們可以認(rèn)為都是對(duì)的,現(xiàn)在要是寫(xiě)測(cè)試程序的話(huà),就是另一層函義了,不是測(cè)試他們的代碼是否有問(wèn)題,而是代表我們對(duì)這個(gè)功能的認(rèn)識(shí)。

經(jīng)常我們會(huì)用 print_r 來(lái)打印,有時(shí)候自己會(huì)主觀的認(rèn)為是這樣是那樣,然后看的也不一定很仔細(xì),然后就認(rèn)為是對(duì)的,最后實(shí)際使用時(shí)發(fā)現(xiàn)不是的想的那樣(我有親身經(jīng)歷),寫(xiě)測(cè)試就是讓程序來(lái)判斷,我們的想法是不是有問(wèn)題,哪里出錯(cuò)了,最主要它還可以把當(dāng)時(shí)的思路保持下來(lái),以后再繼續(xù)回顧。

以下是我在學(xué)習(xí) SplDoublyLinkedList 時(shí)寫(xiě)的一些測(cè)試,以后看到這個(gè)測(cè)試類(lèi),就知道了 SplDoublyLinkedList 該怎么用了。

phppush(0);
        $obj->push(1);
        $obj->push(2);

        // Prepends value at the beginning of the doubly linked list.
        $obj->unshift(10);
        $obj->unshift(11);

        /*
         * 因?yàn)橹羔樳€未初始化
         * 所以
         * 1. 當(dāng)前指針是否有效為 FALSE
         * 2. 直接獲取當(dāng)前指針的值會(huì)是 NULL
         */
        $this->assertEquals(FALSE, $obj->valid());
        $this->assertEquals(NULL, $obj->current());

        $obj->rewind();
        // 將指針重置之后,第一個(gè)肯定是 11 ,因?yàn)樗窃谧詈髨?zhí)行了一個(gè)
        // 將 11 插入到鏈表最前面的一個(gè)函數(shù) unshift
        $this->assertEquals(11, $obj->current());

        $obj->next();
        // 11 下面應(yīng)該是 10
        $this->assertEquals(10, $obj->current());

        // (下一個(gè) 下一個(gè) 上一個(gè)) === (下一個(gè))
        $obj->next(); // 0
        $obj->next(); // 1
        $obj->prev(); // 0
        $this->assertEquals(0, $obj->current());

        $obj->next(); // 1
        $obj->next(); // 2
        $obj->next(); // 已經(jīng)超過(guò)最大的了,使用 valid 判斷應(yīng)該是 false
        $this->assertEquals(false, $obj->valid());
    }

    public function testSplDoublyLinkedListPart2()
    {
        $obj = new SplDoublyLinkedList();
        // Pushes value at the end of the doubly linked list.
        $obj->push(0);
        $obj->push(1);
        $obj->push(2);

        // Prepends value at the beginning of the doubly linked list.
        $obj->unshift(10);
        $obj->unshift(11);

        //  Peeks at the node from the end of the doubly linked list
        //  Return: The value of the last node.
        //  獲取最后一個(gè)節(jié)點(diǎn)的值
        $this->assertEquals(2, $obj->top());

        // Peeks at the node from the beginning of the doubly linked list
        // Return: The value of the first node.
        // 獲取第一個(gè)節(jié)點(diǎn)的值
        $this->assertEquals(11, $obj->bottom());
    }

    public function testIsEmpty(){
        $obj = new SplDoublyLinkedList();

        $this->assertEquals(true, $obj->isEmpty());

        $obj->unshift("string");
        // 這里已經(jīng)有值了就應(yīng)該是 false
        $this->assertEquals(false, $obj->isEmpty());

        // 這時(shí)再使用 pop 彈出最后一個(gè)就應(yīng)該是 "string"
        $this->assertEquals("string", $obj->pop());

    }

    /**
     * 如果是空的時(shí)候試圖 pop 彈出最后一個(gè)節(jié)點(diǎn)的值則會(huì) 拋出一個(gè) RuntimeException
     *
     * @expectedException RuntimeException
     */
    public function testRuntimeException(){
        $obj = new SplDoublyLinkedList();
        $obj->pop();
    }

    public function testOffset(){
        $obj = new SplDoublyLinkedList();
        $obj->push("one");
        $obj->push("two");
        $obj->unshift("three");

        // 下標(biāo)是從0 開(kāi)始的 所以現(xiàn)在3 應(yīng)該是不存在的
        $this->assertEquals(false, $obj->offsetExists(3));

        // 下標(biāo)為2 的應(yīng)該是存在的
        $this->assertEquals(true, $obj->offsetExists(2));

        $this->assertEquals("two", $obj->offsetGet(2));

        // 刪除下標(biāo)為0 的值
        $obj->offsetUnset(0);
        // 刪除為 0 的值之后,后面的都會(huì)向前移一位
        // 所以現(xiàn)在的順序?yàn)椋?one two
        $obj->rewind();
        $this->assertEquals("one", $obj->current());
        $this->assertEquals(0, $obj->key());

        $obj->next();
        $this->assertEquals("two", $obj->current());
        $this->assertEquals(1, $obj->key());
        // 并且總個(gè)數(shù)為 2
        $this->assertEquals(2, $obj->count());
    }

    public function testAdd(){
        $obj = new SplDoublyLinkedList();
        $obj->push("one");
        $obj->push("two");
        $obj->push("three");
        $obj->unshift("four");
        $obj->add(1, "five");

        // 這時(shí)候的順序應(yīng)該是:
        // four five one two three

        $obj->rewind();
        $this->assertEquals("four", $obj->current());
        $obj->next();
        $this->assertEquals("five", $obj->current());
        $obj->next();
        $this->assertEquals("one", $obj->current());
        $obj->next();
        $this->assertEquals("two", $obj->current());
        $obj->next();
        $this->assertEquals("three", $obj->current());
    }
}

原文鏈接 學(xué)習(xí) PHP 程序新東西的另一種方法

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/20943.html

相關(guān)文章

  • 我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言?

    摘要:我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言這一切都取決于你想要完成的事情作為技術(shù)作家,我的任務(wù)是使復(fù)雜的主題易于理解,因此在本文中您將找不到太多技術(shù)術(shù)語(yǔ)。我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言這是我自出版之前收到的最常見(jiàn)的問(wèn)題。是一種后端語(yǔ)言。我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言? 這一切都取決于你想要完成的事情 作為技術(shù)作家,我的任務(wù)是使復(fù)雜的主題易于理解,因此在本文中您將找不到太多技術(shù)術(shù)語(yǔ)。我可以對(duì)面向?qū)ο蟮木?..

    huashiou 評(píng)論0 收藏0
  • 我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言?

    摘要:我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言這一切都取決于你想要完成的事情作為技術(shù)作家,我的任務(wù)是使復(fù)雜的主題易于理解,因此在本文中您將找不到太多技術(shù)術(shù)語(yǔ)。我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言這是我自出版之前收到的最常見(jiàn)的問(wèn)題。是一種后端語(yǔ)言。我應(yīng)該先學(xué)習(xí)哪種編程語(yǔ)言? 這一切都取決于你想要完成的事情 作為技術(shù)作家,我的任務(wù)是使復(fù)雜的主題易于理解,因此在本文中您將找不到太多技術(shù)術(shù)語(yǔ)。我可以對(duì)面向?qū)ο蟮木?..

    selfimpr 評(píng)論0 收藏0
  • 談?wù)剻C(jī)器學(xué)習(xí)與傳統(tǒng)編程之間的區(qū)別

    摘要:機(jī)器學(xué)習(xí)也是這個(gè)大筐中的一個(gè)組成部分。我們目前的發(fā)展階段是機(jī)器學(xué)習(xí)正處在第二級(jí)和第三級(jí)交界處。機(jī)器學(xué)習(xí)工程師的職位是怎樣的機(jī)器學(xué)習(xí)工程師的位置更具有技術(shù)性。換句話(huà)說(shuō),機(jī)器學(xué)習(xí)工程師與傳統(tǒng)的軟件工程有著比數(shù)據(jù)科學(xué)更多的相同點(diǎn)。 翻譯:瘋狂的技術(shù)宅https://towardsdatascience.co... showImg(https://segmentfault.com/img/b...

    王巖威 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<