Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

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

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

Aktivity (1)
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.