1

例如,考虑X具有一些实用方法('foo','bar')的类,这些方法对X. 这些方法对于其他外部变量也很有用。有些可能实现XstaticX类如下:class Foo

class StaticX
{

    public static function foo($p)
    {
        return $p * $p;
    }
}

class X
{
    private $p=4;

    public function foo()
    {
        return StaticX::foo($this->p);
    }
}

$x= new x;
echo $x->foo();

echo StaticX::foo(3);

但是这种方法存在一些可维护性问题。有没有更好的解决方案?

4

3 回答 3

2
class X
{
    private $p;

    public function foo()
    {
        return self::doFoo($this->p);
    }

    public static function doFoo($p)
    {
        return $p * $p;
    }
}
于 2013-03-18T06:45:44.477 回答
0

我喜欢愚蠢的回答,但是这个呢?

class X
{
    private static $p;

    public static function foo($p=null)
    {
        if ( is_null( $p ) ) {
            $p = self::$p;
        }
        return $p * $p;
    }
}
于 2013-03-18T07:27:23.500 回答
0

从 PHP 5.4 开始,您可以使用traits. 见http://www.php.net/manual/en/language.oop5.traits.php

trait fooBehavior {
    function getFoo() { return self::foo($this->p); }
    static function foo($p) { return $p * $p; }
}

class X {
    use fooBehavior;

    private $p;

    public function __construct($p) { $this->p = $p; }
}

$x = new X(2);
echo $x->getFoo(); // echoes 4
echo $x::foo(2); // echoes 4
于 2013-03-18T08:43:11.050 回答