Hướng dẫn call public function inside static function php - gọi hàm công khai bên trong hàm tĩnh php

Do thực tế là bạn không thể sử dụng $ this-> bên trong một functio tĩnh, làm thế nào bạn có thể truy cập các chức năng chính quy bên trong một tĩnh?

private function hey()
{
    return 'hello';
}

public final static function get()
{
    return $this->hey();
}

Điều này ném một lỗi, vì bạn không thể sử dụng $ this-> bên trong tĩnh.

private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}

Điều này đã ném lỗi sau:

Non-static method Vote::get() should not be called statically

Làm thế nào bạn có thể truy cập các phương thức thông thường bên trong một phương thức tĩnh? Trong cùng một lớp*

Đã hỏi ngày 7 tháng 5 năm 2013 lúc 20:59May 7, 2013 at 20:59

Hướng dẫn call public function inside static function php - gọi hàm công khai bên trong hàm tĩnh php

5

Các phương thức tĩnh chỉ có thể gọi các phương thức tĩnh khác trong một lớp. Nếu bạn muốn truy cập vào một thành viên không tĩnh, thì chính phương thức này phải không tĩnh.

Ngoài ra, bạn có thể chuyển trong một thể hiện đối tượng vào phương thức tĩnh và truy cập các thành viên của nó. Vì phương pháp tĩnh được khai báo trong cùng một lớp với các thành viên tĩnh mà bạn quan tâm, nó vẫn sẽ hoạt động vì khả năng hiển thị hoạt động trong PHP

class Foo {

    private function bar () {
        return get_class ($this);
    }

    static public function baz (Foo $quux) {
        return $quux -> bar ();
    }
}

Mặc dù vậy, xin lưu ý rằng, chỉ vì bạn có thể làm điều này, nó có thể đặt câu hỏi liệu bạn có nên không. Loại mã này phá vỡ thực hành lập trình hướng đối tượng tốt.

Đã trả lời ngày 7 tháng 5 năm 2013 lúc 21:11May 7, 2013 at 21:11

Hướng dẫn call public function inside static function php - gọi hàm công khai bên trong hàm tĩnh php

GordonmgordonmGordonM

30.5K15 Huy hiệu vàng86 Huy hiệu bạc129 Huy hiệu đồng15 gold badges86 silver badges129 bronze badges

1

Bạn có thể cung cấp một tham chiếu đến một thể hiện cho phương thức tĩnh:

class My {
    protected myProtected() {
        // do something
    }

    public myPublic() {
        // do something
    }

    public static myStatic(My $obj) {
        $obj->myProtected(); // can access protected/private members
        $obj->myPublic();
    }

}

$something = new My;

// A static method call:
My::myStatic($something);

// A member function call:
$something->myPublic();

Như được hiển thị ở trên, các phương thức tĩnh có thể truy cập các thành viên riêng tư và được bảo vệ (thuộc tính và phương thức) trên các đối tượng của lớp chúng là thành viên của.

Ngoài ra, bạn có thể sử dụng mẫu Singleton (đánh giá tùy chọn này) nếu bạn chỉ cần một trường hợp.

Đã trả lời ngày 7 tháng 5 năm 2013 lúc 21:09May 7, 2013 at 21:09

LukaslukasLukas

1.4698 Huy hiệu bạc20 Huy hiệu Đồng8 silver badges20 bronze badges

Tôi đã giải quyết điều này bằng cách tạo một đối tượng của lớp liên quan trong một phương thức tĩnh. Bằng cách này, tôi cũng có thể phơi bày một số chức năng công cộng cụ thể là chức năng tĩnh. Các chức năng công cộng khác chỉ có thể được sử dụng như $object->public_function();

Một ví dụ về mã nhỏ:

class Person
{
  public static function sayHi()
  {
    return (new Person())->saySomething("hi");
  }

  public function saySomething($text)
  {
    echo($text);
  }

  private function smile()
  {
    # dome some smile logic
  }
}

Bằng cách này, bạn chỉ có thể nói hi nếu sử dụng hàm tĩnh nhưng bạn cũng có thể nói những điều khác khi tạo một đối tượng như $peter->saySomething('hi');. Các chức năng công cộng cũng có thể sử dụng các chức năng riêng tư theo cách này.

Lưu ý rằng tôi không chắc đây có phải là cách thực hành tốt nhất không nhưng nó hoạt động trong tình huống của tôi, nơi tôi muốn có thể tạo mã thông báo mà không cần tạo một đối tượng bằng tay mỗi lần.

Ví dụ, tôi có thể chỉ ra hoặc xác minh chuỗi mã thông báo như TokenManager::getTokenToken(); hoặc

private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}
0 nhưng tôi cũng có thể đưa ra một đối tượng mã thông báo như
private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}
1 để tôi có thể sử dụng chức năng như
private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}
2,
private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}
3 hoặc
private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}
4

Đã trả lời ngày 22 tháng 7 năm 2021 lúc 7:29Jul 22, 2021 at 7:29

Hướng dẫn call public function inside static function php - gọi hàm công khai bên trong hàm tĩnh php

CodeninjacodeninjaCodeNinja

7991 Huy hiệu vàng11 Huy hiệu bạc36 Huy hiệu đồng1 gold badge11 silver badges36 bronze badges