Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

27

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tại sao trong PHP, bạn có thể truy cập phương thức tĩnh thông qua thể hiện của một số lớp nhưng không chỉ thông qua tên loại?

Cập nhật: Tôi là nhà phát triển .NET nhưng tôi cũng làm việc với các nhà phát triển PHP. Gần đây tôi đã tìm thấy khoảnh khắc này về các phương thức tĩnh được gọi từ ví dụ và không thể hiểu tại sao nó có thể hữu ích.

EXAMPLE:

class Foo
{
    public static Bar()
    {
    }
}

Chúng ta có thể chấp nhận phương pháp như thế này:

var $foo = new Foo();
$foo.Bar(); // ??????

Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

Matthew Lock

12.5K11 Huy hiệu vàng89 Huy hiệu bạc128 Huy hiệu đồng11 gold badges89 silver badges128 bronze badges

hỏi ngày 9 tháng 2 năm 2012 lúc 7:09Feb 9, 2012 at 7:09

3

Trong PHP

Lớp được khởi tạo bằng cách sử dụng từ khóa mới chẳng hạn;

var $foo = new Foo();
$foo.Bar(); // ??????
1

và phương thức tĩnh hoặc thuộc tính có thể được truy cập bằng cách sử dụng toán tử phân giải phạm vi hoặc toán tử tham chiếu đối tượng. Ví dụ: nếu lớp

var $foo = new Foo();
$foo.Bar(); // ??????
2 chứa phương thức tĩnh
var $foo = new Foo();
$foo.Bar(); // ??????
3 thì bạn có thể truy cập nó bằng cách nào đó.

$MyClass->Foo();

Hoặc

MyClass::Foo()

Quy tắc duy nhất là các phương thức hoặc thuộc tính tĩnh nằm ngoài bối cảnh đối tượng. Ví dụ: bạn không thể sử dụng

var $foo = new Foo();
$foo.Bar(); // ??????
4 bên trong một phương thức tĩnh.

Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

wp78de

17.6K6 Huy hiệu vàng38 Huy hiệu bạc68 Huy hiệu Đồng6 gold badges38 silver badges68 bronze badges

Đã trả lời ngày 9 tháng 2 năm 2012 lúc 7:12Feb 9, 2012 at 7:12

Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

3

Class Do {
  static public function test() {
      return 0;
  }
}

Sử dụng như thế này:

echo Do::test();

Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

Milap

6.5898 Huy hiệu vàng25 Huy hiệu bạc45 Huy hiệu Đồng8 gold badges25 silver badges45 bronze badges

Đã trả lời ngày 14 tháng 12 năm 2016 lúc 16:32Dec 14, 2016 at 16:32

Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

Afkirsaid afkir nóiSaid Afkir

Huy hiệu Silver Silver5 Huy hiệu Đồng1 silver badge5 bronze badges

Tại sao trong PHP, bạn có thể truy cập phương thức tĩnh thông qua thể hiện của một số lớp nhưng không chỉ thông qua tên loại?

Không giống như những gì bạn có thể đã quen với .NET, PHP có các loại động. Xem xét:

class Foo
{
  static public function staticMethod() { }
}

class Bar
{
  static public function staticMethod() { }
}

function doSomething($obj)
{
  // What type is $obj? We don't care.
  $obj->staticMethod();
}

doSomething(new Foo());
doSomething(new Bar());

Vì vậy, bằng cách cho phép truy cập vào các phương thức tĩnh thông qua thể hiện đối tượng, bạn có thể dễ dàng gọi hàm tĩnh của cùng tên trên các loại khác nhau.

Bây giờ tôi không biết nếu có một lý do chính đáng tại sao truy cập phương thức tĩnh thông qua

var $foo = new Foo();
$foo.Bar(); // ??????
5 được phép. PHP (5.3?) Cũng hỗ trợ:

$obj::staticMethod();

mà có lẽ ít khó hiểu hơn. Khi sử dụng

var $foo = new Foo();
$foo.Bar(); // ??????
6, nó phải là một hàm tĩnh để tránh các cảnh báo (không giống như
var $foo = new Foo();
$foo.Bar(); // ??????
5, cũng cho phép).

Đã trả lời ngày 9 tháng 2 năm 2012 lúc 8:28Feb 9, 2012 at 8:28

MatthewmatthewMatthew

46.8K11 Huy hiệu vàng85 Huy hiệu bạc97 Huy hiệu đồng11 gold badges85 silver badges97 bronze badges

5

Trong PHP, trong khi bạn được phép truy cập phương thức tĩnh bằng cách tham khảo một thể hiện của lớp, bạn không nhất thiết phải làm như vậy. Ví dụ: đây là một lớp có chức năng tĩnh:

class MyClass{
    public static function  MyFunction($param){
        $mynumber=param*2;
        return $mynumber;
}

Bạn có thể truy cập phương thức tĩnh chỉ bằng tên loại như thế này, nhưng trong trường hợp này, bạn phải sử dụng dấu hai chấm (: :), thay vì "->".

$result= MyClass::MyFunction(2);

(Xin lưu ý rằng bạn cũng có thể truy cập phương thức tĩnh thông qua một thể hiện của lớp cũng bằng cách sử dụng "->"). Để biết thêm thông tin: http://php.net/manual/en/langage.oop5.static.php

Đã trả lời ngày 12 tháng 3 năm 2018 lúc 20:40Mar 12, 2018 at 20:40

Đôi khi, nó rất hữu ích nếu chúng ta có thể truy cập các phương thức và thuộc tính trong bối cảnh của một lớp chứ không phải là một đối tượng. Để làm điều này, bạn có thể sử dụng từ khóa tĩnh. Vì vậy, chúng ta có thể truy cập phương thức tĩnh bằng cách sử dụng tên lớp cùng với độ phân giải phạm vi.

var $foo = new Foo();
$foo.Bar(); // ??????
0

Nhìn ở đây chúng tôi đã tuyên bố một phương thức tĩnh trong lớp người dùng của chúng tôi. Vì vậy, nếu chúng tôi khai báo một phương thức tĩnh thì chúng tôi có thể truy cập ở đó chỉ bằng tên lớp. Không cần tạo đối tượng để truy cập ở đó. Hy vọng bạn sẽ hiểu tất cả các thủ tục.

Lưu ý: Đây thực sự là sự khác biệt chính với một phương pháp bình thường: $ Điều này không có sẵn trong các phương pháp như vậy.

Đọc toàn bộ bài viết từ đây làm thế nào để sử dụng các thuộc tính tĩnh trong PHP?

Hướng dẫn can we call static method in php? - chúng ta có thể gọi phương thức tĩnh trong php không?

Ehsan

12.3k3 Huy hiệu vàng23 Huy hiệu bạc43 Huy hiệu đồng3 gold badges23 silver badges43 bronze badges

Đã trả lời ngày 20 tháng 1 năm 2019 lúc 16:59Jan 20, 2019 at 16:59

Trong Php 7, dường như bạn hoàn toàn cần thiết cho bạn để có thể làm

var $foo = new Foo();
$foo.Bar(); // ??????
8. Bởi vì, nếu mã này được viết trong một lớp trừu tượng và
var $foo = new Foo();
$foo.Bar(); // ??????
9 cũng là trừu tượng trong lớp trừu tượng của bạn,
$MyClass->Foo();
0 và
$MyClass->Foo();
1 mang lại kết quả khác nhau!

Khi thực hiện

var $foo = new Foo();
$foo.Bar(); // ??????
8 từ một đứa trẻ (không phải là người) của lớp trừu tượng, bạn sẽ kết thúc trong
$MyClass->Foo();
3. Tất cả đều tốt.

Tuy nhiên, việc thực hiện

$MyClass->Foo();
4 từ một đứa trẻ (không phải là của lớp trừu tượng, bạn kết thúc trong
$MyClass->Foo();
5, là trừu tượng và do đó ném một ngoại lệ.

Tôi đoán đây chỉ là một ví dụ khác về PHP được thiết kế xấu. Hoặc bản thân tôi cần nhiều cà phê hơn ...

Đã trả lời ngày 24 tháng 8 năm 2018 lúc 14:04Aug 24, 2018 at 14:04

1

Chúng ta có thể gọi phương thức tĩnh không?

Các phương pháp tĩnh là các phương pháp được liên kết với một lớp chứ không phải là một đối tượng. Họ được tuyên bố bằng cách sử dụng từ khóa tĩnh. Chúng ta có thể gọi các phương thức tĩnh mà không cần tạo một thể hiện của lớp.We can call static methods without creating an instance of the class.

Phương pháp tĩnh có thể được gọi bằng PHP đối tượng không?

Một thuộc tính được khai báo là không thể truy cập tĩnh với một đối tượng lớp khởi tạo (mặc dù phương thức tĩnh có thể).Đây là lý do tại sao bạn có thể gọi phương thức trên một ví dụ, mặc dù đó không phải là những gì bạn dự định làm.a static method can). This is why you are able to call the method on an instance, even though that is not what you intended to do.

Chúng ta có thể sử dụng điều này trong Phương pháp tĩnh PHP không?

Bạn không thể sử dụng $ Điều này bên trong một hàm tĩnh, bởi vì các hàm tĩnh độc lập với bất kỳ đối tượng khởi tạo nào.Hãy thử làm chức năng không tĩnh.Chỉnh sửa: Theo định nghĩa, các phương thức tĩnh có thể được gọi mà không có bất kỳ đối tượng khởi tạo nào, và do đó không có ý nghĩa sử dụng $ này bên trong một phương thức tĩnh., because static functions are independent of any instantiated object. Try making the function not static. Edit: By definition, static methods can be called without any instantiated object, and thus there is no meaningful use of $this inside a static method.

Phương pháp tĩnh được gọi như thế nào trong PHP?

Để thêm một phương thức tĩnh vào lớp, từ khóa tĩnh được sử dụng.Chúng có thể được gọi trực tiếp bên ngoài lớp bằng cách sử dụng toán tử độ phân giải phạm vi (: :) như sau: myClass :: test ();They can be invoked directly outside the class by using scope resolution operator (::) as follows: MyClass::test();