好的,我有这个代码,我正在学习
class scope{
function printme(){
return "hello";
}
public static function printme(){
return "hello";
}
}
$s = new scope();
echo $s->printme(); //non-static call
echo "<br>";
echo scope::printme(); //static call
现在,这不是我项目的代码,但这些是我想做的事情
- 我想创建一个包含静态和非静态函数的类。
- 我希望一个函数在静态和非静态调用中都可用。
由于非静态函数上有很多操作,我还需要将其作为静态函数调用,这样我就不需要实例化类了。这可能吗?或者我真的需要将函数重写为另一个函数或类?
注意:告诉我我是否已经在做一些糟糕的编程。
规则如下:
静态方法既可用于静态方法,也可以用于非静态方法。
非静态方法只能在非静态方法中使用。
如果很少需要类的实例,可以让静态方法创建一个实例,调用非静态方法并返回值。
class Scope {
public function mynonstatic() {
}
public static function mystatic() {
$s = new Scope();
return $s->mynonstatic();
}
}
请记住,静态方法实际上只是一个范围缩小的全局函数。 它们是有用的,但不应在没有充分理由的情况下创建。
由于非静态函数有很多操作,我还需要 将其调用为静态函数,这样我就不需要实例化 类。这可能吗?或者我真的需要重写 函数到另一个函数或类?
如果您需要静态,请将其设置为静态。如果你不需要它,那就保持原样。可以从非静态函数内部调用静态函数。
class Foo
{
public function bar()
{
Foo::zex();
// or self::zex() or even $this->zex();
}
public static function zex()
{
}
}
$foo = new Foo;
$foo->bar();
蚂蚁反过来。
class Foo
{
public function bar()
{
}
public static function zex()
{
$foo = new Foo;
$foo->bar();
}
}
什么时候应该做,或者应该做是另一个问题。后者最常见的用途可能是单例模式。