使用静态方法和静态属性作为`global`

时间:2015-01-02 17:22:20

标签: php phpunit tdd

此练习示例有什么问题吗?

class Test {
    static $_instance = null; // self
    protected $_name = null;


    /**
     * Get instance
     * @return [type] [description]
     */

        public static function getInstance() {
            if(is_null(self::$_instance))
                self::$_instance = new self;

            return self::$_instance;
        }

    /**
     * Set name
     */

        public static function setName($name) {
            self::getInstance()->_name = $name;
        }

        public static function getName() {
            return self::getInstance()->_name;
        }
}

然后在任何地方这样做:

Test::setName('Some name');

Test::getName(); // returns "Some name"

而不是:

// somewhere early
$test = new Test;

// somewhere else
function someRandomFunction() {
    global $test;

    $test->setName('Hello there');
}

// somewhere else
function AnotherRandomFunction() {
    global $test;

    return $test->getName();
}

我写了一个看起来像这样的测试:

class TestTest extends WP_UnitTestCase {


    function testInstance() {
        $someName = 'Hello ' . time();

        Test::setName($someName);

        $this->assertEquals(Test::getName(), $someName);
    }
}

这是我写的第一次测试,我不确定我的测试和方法是否被视为良好实践。

0 个答案:

没有答案