1

たとえばX、 のプロパティに対して何らかの操作を行ういくつかのユーティリティ メソッド ('foo','bar') を持つクラスを考えてみましょうX。これらのメソッドは、他の外部変数にも役立ちます。X以下のようにクラスを実装するものもありstaticXます: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 以降、 を利用できますtraitshttp://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 に答える