Diskuze: Izolování globání části proměnné

PHP PHP Izolování globání části proměnné American English version English version

Avatar
ConflictBoy
Člen
Avatar
ConflictBoy:

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
Není štěstí bez činu
Avatar
Odpovídá na ConflictBoy
Martin Konečný (pavelco1998):

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
Avatar
ConflictBoy
Člen
Avatar
Nahoru Odpovědět 12.8.2014 19:50
Není štěstí bez činu
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.