IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
ConflictBoy
Člen
Avatar
ConflictBoy:12.8.2014 18:39

Dobrý den,
chtěl bych se zeptat k čemu je dobrý tenhle zdrojový kód. Nějak nechápu, co to s těmi proměnnými dělá :D

<?php
require "Input.php";

class InputTest extends PHPUnit_Framework_TestCase
{
    public function testCanLoadFromGlobals()
    {
        $_GET['foo'] = 'Hello';

        $input = Input::createFromGlobals();

        var_dump($input);

        $this->assertEquals($_GET['foo'], $input->get('foo'));
        $this->assertNull($input->get('bar'));
    }

    public function testCanReplaceInputValues()
    {
        $newInputs = [
            'get' => ['foo' => 'Hello'],
            'post' => ['bar' => 'World']
        ];

        $input = new Input();

        $input->replace($newInputs);

        $this->assertEquals($newInputs['get']['foo'], $input->get('foo'));
        $this->assertEquals($newInputs['post']['bar'], $input->post('bar'));
    }
}
<?php

class Input
{
    protected $inputs = [
        'get' => [],
        'post' => []
    ];

    public static function createFromGlobals()
    {
        return new static(['get' => $_GET, 'post' => $_POST]);
    }

    public function __construct($inputs = [])
    {
        $this->replace($inputs);
    }

    public function replace($inputs = [])
    {
        foreach ($this->inputs as $key => $input) {
            if (isset($inputs[$key])) {
                $this->inputs[$key] = $inputs[$key];
            }
        }
    }

    public function get($key)
    {
        return $this->fetch('get', $key);
    }

    public function post($key)
    {
        return $this->fetch('post', $key);
    }

    protected function fetch($input, $key)
    {
        $result = null;

        if (isset($this->inputs[$input][$key])) {
            $result = $this->inputs[$input][$key];
        }

        return $result;
    }
}
Odpovědět
12.8.2014 18:39
I'm programmer, I have no life :)
Avatar
Odpovídá na ConflictBoy
Martin Konečný (pavelco1998):12.8.2014 18:57

Zdar,

obecně jde v tomhle příkladu o test dvou scriptů. Třída Input pracuje s daty v polích $_GET a $_POST a třída InputTest pak tvoří jednotlivé testy.
Např. ten první test dělá to, že:

  1. Do pole $_GET uloží hodnota 'Hello' pod klíčem 'foo'.
  2. Metoda Input::create­FromGlobals() uloží hodnoty obou polích do svých proměnných (atributů).
  3. Metody assert*() pak testují shodu hodnot. Např. assertEquals() testuje, zda se oba předané parametry sobě rovnají, assertNull() pak testuje, jestli předaná hodnota je NULL.

Nemám s testováním zkušenost, ale podle čtení by ty metody assert*() měly vyhazovat nějaké chyby, pokud test selže. Pokud to sám chápu správně, pak se napíší takovéhle testy, které se vždy spouští třeba v případě, že se udělá update PHP verze.

Nahoru Odpovědět
12.8.2014 18:57
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
ConflictBoy
Člen
Avatar
Nahoru Odpovědět
12.8.2014 19:50
I'm programmer, I have no life :)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.