例如,考虑具有一些实用方法('foo','bar')的类X
,它们对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);
但这种方法存在一些可维护性问题。 有没有更好的解决方案?
答案 0 :(得分:2)
class X
{
private $p;
public function foo()
{
return self::doFoo($this->p);
}
public static function doFoo($p)
{
return $p * $p;
}
}
答案 1 :(得分:0)
我喜欢愚蠢的答案,但是这个怎么样?
class X
{
private static $p;
public static function foo($p=null)
{
if ( is_null( $p ) ) {
$p = self::$p;
}
return $p * $p;
}
}
答案 2 :(得分: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