好的我有这个代码,我正在学习
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
现在,这不是我项目的代码,但这些是我想要做的事情
由于非静态函数对它有很多操作,我还需要将其称为静态函数,这样我就不需要实例化该类了。这可能吗?或者我真的需要将函数重写为另一个函数或类?
注意:告诉我我是否已经做了一些糟糕的编程。
答案 0 :(得分:35)
以下是规则:
静态方法可以用于静态方法和非静态方法。
非静态方法只能用于非静态方法。
答案 1 :(得分:6)
如果很少需要类的实例,可以让static方法创建一个实例,调用非静态方法并返回值。
class Scope {
public function mynonstatic() {
}
public static function mystatic() {
$s = new Scope();
return $s->mynonstatic();
}
}
请记住,静态方法实际上只是一个范围缩小的全局函数。它们很有用,但不应该在没有充分理由的情况下创建。
答案 2 :(得分:2)
由于非静态函数对它有很多操作,我还需要 将其称为静态函数,以便我不需要实例化 班级。这可能吗?或者我真的需要改写 功能到另一个功能或类?
如果您需要静态,请将其设为静态。如果你不需要它,那就保持原样。从非静态函数中可以调用静态函数。
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();
}
}
当你应该这样做或者你应该这样做是另一个问题。后者最常见的用途可能是Singleton模式。