Refaktorierung einer Klasse - Teil 2

Geschrieben von Dejan Spasic • Saturday, 11. December 2010 • Kategorie: PHPKommentare (0)

Im zweiten Teil beginne ich mit was leichtem, nämlich, mit dem Smell "Poorly Written Comment". Hier werde ich vor allem redundante Kommentare entfernen. Das sind z.B. Kurzbeschreibungen, die identisch mit den Methodennamen sind, oder der PHPDoc-Tag @return void, wenn die Methode keinen Wert zurückliefert.

"Refaktorierung einer Klasse - Teil 2" vollständig lesen

Tags für diesen Artikel: ,

Refaktorierung einer Klasse - Teil 1

Geschrieben von Dejan Spasic • Friday, 3. December 2010 • Kategorie: PHPKommentare (0)

Ich möchte euch aufzeigen was für Möglichkeiten bestehen, um eine Klasse zu Refaktorieren. Die besagte Klasse WebBrowserDetector ist eine relativ kleine Klasse die schon einige Jahre hinter sich hat und dazu dient, die UserAgent Variable zu analysieren, um bestimmte Daten ermitteln zu können. Sie wurde bei einem meiner Projekte geboren, weil es hieß, die Funktion get_browser wäre für die Anforderung zu aufgebläht und zu langsam. Ich lass das jetzt einfach mal so stehen.

"Refaktorierung einer Klasse - Teil 1" vollständig lesen

Tags für diesen Artikel: ,

Nur bestimmte Testmethoden mittels filter Parameter ausführen

Geschrieben von Dejan Spasic • Thursday, 2. December 2010 • Kategorie: PHPKommentare (0)
Author: stevendepolo http://www.flickr.com/photos/stevendepolo/5220100578/

Es gibt Fälle wo man schnell nur eine Methode testen möchte bzw. eine Testmethode ausführen möchte. Mit PHPUnit kann dieses Anliegen schnell mit dem Parameter filter gelöst werden. Hier eine simple Klasse die getestet werden soll.

<?php
declare(encoding="UTF-8");

namespace DD
{
    class Foo
    {
        private $value;

        public function __construct($value = null)
        {
            $this->value = $value?:__CLASS__;
        }

        public function getValue()
        {
            return $this->value;
        }
    }
}
Und dazu die Test-Klasse:
<?php
declare(encoding="UTF-8");

require_once "Foo.php";

class DD_FooTest extends PHPUnit_Framework_TestCase
{
    /**
     * @test
     */
    public function getValue_withDefaultValue()
    {
        $subject = new DD\Foo();
        $this->assertEquals("DD\\Foo", $subject->getValue());
    }

    /**
     * @test
     */
    public function getValue_withCustomValue()
    {
        $subject = new DD\Foo(__CLASS__);
        $this->assertEquals("DD_FooTest", $subject->getValue());
    }
}

Möchte man nun nur die Testmethode getValue_withCustomValue ausführen, so gibt man einfach den folgenden Befehl ein.

phpunit --filter getValue_withCustomValue FooTest.php 

Reguläre Ausdrücke sind hier auch erlaubt.

phpunit --filter *_with[A-Z]ustom* FooTest.php 
Tags für diesen Artikel: ,

Warum die Funktion extract für PMD Messungen nicht geeignet ist

Geschrieben von Dejan Spasic • Wednesday, 1. December 2010 • Kategorie: PHPKommentare (0)

Eigentlich verwende ich persönlich die Funktion extract gar nicht, da ich in diesem Fall lieber den expliziten Weg wähle. Dennoch taucht die Funktion im fremden Quelltext ab und zu mal auf. Was an sich ja nicht schlimm ist, solange man weiß was der Funktion übergeben wird. Nur ist die Idee, die Funktion in Verbindung mit einer statischen Code-Analyse zu verwenden, keine so gute. Hier ist die Rede von PMD der Kategorie Unused Code Rules vom Typ UnusedLocalVariable. Schauen wir uns mal den folgenden Quelltext an.

    $viewVars = array('style' => 'bold');
    extract($viewVars);
    
    $helper = $this->getHelper();
    
    $html = $helper->open('div.dm_text.text_'.$style.'.clearfix');

Wenn wir nun diesen Quelltext mit phpmd analysieren, werden wir feststellen, das die Variable $style als unbenutzte lokale Variable erkannt wird. Was ja auch logisch ist. Es gibt zwei Möglichkeiten dieses "Problem" zu umgehen. Man gibt phpmd in irgendeiner Form die nötigen Informationen, was derzeit nicht möglich ist, oder man meidet den Einsatz von extract und schreibt die Variablen voll aus. Ich weiß nicht wie ihr darüber denkt, aber ich tendiere zu Möglichkeit b.

Tags für diesen Artikel: , ,

setTranslationCatalogue vom sfWidgetFormSchemaFormatter einsetzen

Geschrieben von Dejan Spasic • Tuesday, 23. November 2010 • Kategorie: PHPKommentare (0)

Mit der sfWidgetFormSchemaFormatter::setTranslationCatalogue hat man die Möglichkeit, den Cataloguenamen für die Übersetzung zu setzen. Aber Vorsicht, dies sollte logischerweise erst nach dem man den sfWidgetFormSchemaFormatter für das Formular definiert hat setzen.

//Falsch
$this->widgetSchema->getFormFormatter()->setTranslationCatalogue('user');
$this->widgetSchema->setFormFormatterName('table');

//Richtig
$this->widgetSchema->setFormFormatterName('table');
$this->widgetSchema->getFormFormatter()->setTranslationCatalogue('user');

So viel dazu.

Tags für diesen Artikel: , ,