Вопрос по php, oop – Статические и нестатические вызовы в PHP

14

хорошо, у меня есть этот код, который я изучаю

 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

Это не код моего проекта, но это то, что я хочу сделать.

I want to create a class the will contain static and non-static functions. I want a function to be available both on static and non-static calls.

Поскольку в нестатической функции много операций, я также должен вызывать ее как статическую функцию, чтобы мне не нужно было создавать экземпляр класса. Это возможно? или мне действительно нужно было переписать функцию в другую функцию или класс?

ПРИМЕЧАНИЕ: скажите мне, если я уже занимаюсь плохим программированием.

Ваш Ответ

3   ответа
2

call it as a static function so that I will not need to instantiate the class. Is this possible? or I really needed to rewrite the function to another function or class?

Если вам нужно это статично, то сделайте это статичным. Если вам это не нужно, то оставьте все как есть. Из нестатической функции можно вызывать статическую функцию.

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();
    }
}

Когда вы должны это делать или должны делать это вообще, это другой вопрос. Наиболее распространенное использование последнего - это, вероятно, паттерн Синглтон.

6

вы можете сделать так, чтобы статический метод создал экземпляр, вызвал нестатический метод и возвратил значение.

class Scope {
    public function mynonstatic() {
    }

    public static function mystatic() {
        $s = new Scope();
        return $s->mynonstatic();
    }
}

Помните, что статический метод - это на самом деле просто глобальная функция с ограниченной областью действия. Они полезны, но не должны создаваться без уважительной причины.

35

Here is the rule:

Статический метод может использоваться как в статическом, так и в нестатическом методе.

Нестатический метод может использоваться только в нестатическом методе.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededFatal error: Uncaught Error: Using $this when not in object contextError: User Rate Limit ExceededPHP Deprecated: Non-static method test::foo() should not be called staticallyError: User Rate Limit Exceeded

Похожие вопросы