Hướng dẫn php function invoke method by name dynamic - hàm php gọi phương thức theo tên động

Có cách nào để tự động gọi một phương pháp trong cùng một lớp cho PHP không? Tôi không có cú pháp đúng, nhưng tôi đang tìm cách làm điều gì đó tương tự như thế này:

$this->{$methodName}($arg1, $arg2, $arg3);

Hỏi ngày 30 tháng 10 năm 2008 lúc 19:43Oct 30, 2008 at 19:43

Hướng dẫn php function invoke method by name dynamic - hàm php gọi phương thức theo tên động

VirtuosimediavirtuosimediaVirtuosiMedia

50.4K21 Huy hiệu vàng93 Huy hiệu bạc139 Huy hiệu đồng21 gold badges93 silver badges139 bronze badges

3

Có nhiều hơn một cách để làm điều đó:

$this->{$methodName}($arg1, $arg2, $arg3);
$this->$methodName($arg1, $arg2, $arg3);
call_user_func_array(array($this, $methodName), array($arg1, $arg2, $arg3));

Bạn thậm chí có thể sử dụng API phản xạ http://php.net/manual/en/ class.reflection.php

Hướng dẫn php function invoke method by name dynamic - hàm php gọi phương thức theo tên động

LXG

Huy hiệu vàng 11.6K1146 Huy hiệu bạc70 Huy hiệu đồng11 gold badges46 silver badges70 bronze badges

Đã trả lời ngày 30 tháng 10 năm 2008 lúc 19:50Oct 30, 2008 at 19:50

4

Bạn có thể sử dụng quá tải trong PHP: quá tải

class Test {

    private $name;

    public function __call($name, $arguments) {
        echo 'Method Name:' . $name . ' Arguments:' . implode(',', $arguments);
        //do a get
        if (preg_match('/^get_(.+)/', $name, $matches)) {
            $var_name = $matches[1];
            return $this->$var_name ? $this->$var_name : $arguments[0];
        }
        //do a set
        if (preg_match('/^set_(.+)/', $name, $matches)) {
            $var_name = $matches[1];
            $this->$var_name = $arguments[0];
        }
    }
}

$obj = new Test();
$obj->set_name('Any String'); //Echo:Method Name: set_name Arguments:Any String
echo $obj->get_name();//Echo:Method Name: get_name Arguments:
                      //return: Any String

Hướng dẫn php function invoke method by name dynamic - hàm php gọi phương thức theo tên động

Fabricio

3.1702 Huy hiệu vàng15 Huy hiệu bạc21 Huy hiệu đồng2 gold badges15 silver badges21 bronze badges

Đã trả lời ngày 6 tháng 1 năm 2017 lúc 21:11Jan 6, 2017 at 21:11

RodolfonetorodolfonetoRodolfoNeto

4735 Huy hiệu bạc3 Huy hiệu Đồng5 silver badges3 bronze badges

Chỉ cần bỏ qua niềng răng:

$this->$methodName($arg1, $arg2, $arg3);

Đã trả lời ngày 30 tháng 10 năm 2008 lúc 19:46Oct 30, 2008 at 19:46

Konrad Rudolphkonrad RudolphKonrad Rudolph

516K126 Huy hiệu vàng920 Huy hiệu bạc1196 Huy hiệu Đồng126 gold badges920 silver badges1196 bronze badges

0

Bạn cũng có thể sử dụng call_user_func()call_user_func_array()

Đã trả lời ngày 30 tháng 10 năm 2008 lúc 19:51Oct 30, 2008 at 19:51

Peter Baileypeter BaileyPeter Bailey

104K31 Huy hiệu vàng181 Huy hiệu bạc201 Huy hiệu đồng31 gold badges181 silver badges201 bronze badges

Nếu bạn đang làm việc trong một lớp trong PHP, thì tôi sẽ khuyên bạn nên sử dụng chức năng __Call quá tải trong PHP5. Bạn có thể tìm thấy tài liệu tham khảo ở đây.

Về cơ bản __Call thực hiện cho các hàm động những gì __set và __get làm cho các biến trong OO PHP5.

Đã trả lời ngày 30 tháng 10 năm 2008 lúc 19:52Oct 30, 2008 at 19:52

Nô -ê Goodrichnoah GoodrichNoah Goodrich

24.5K13 Huy hiệu vàng65 Huy hiệu bạc95 Huy hiệu Đồng13 gold badges65 silver badges95 bronze badges

Trong trường hợp của tôi.

$response = $client->{$this->requestFunc}($this->requestMsg);

Sử dụng xà phòng PHP.

Jason Plank

2.3424 Huy hiệu vàng32 Huy hiệu bạc40 Huy hiệu đồng4 gold badges32 silver badges40 bronze badges

Đã trả lời ngày 16 tháng 12 năm 2008 lúc 11:58Dec 16, 2008 at 11:58

1

Bạn có thể lưu trữ một phương thức trong một biến duy nhất bằng cách sử dụng đóng cửa:

class test{        

    function echo_this($text){
        echo $text;
    }

    function get_method($method){
        $object = $this;
        return function() use($object, $method){
            $args = func_get_args();
            return call_user_func_array(array($object, $method), $args);           
        };
    }
}

$test = new test();
$echo = $test->get_method('echo_this');
$echo('Hello');  //Output is "Hello"

Chỉnh sửa: Tôi đã chỉnh sửa mã và bây giờ nó tương thích với PHP 5.3. Một ví dụ khác ở đây

Đã trả lời ngày 26 tháng 11 năm 2014 lúc 11:59Nov 26, 2014 at 11:59

DaviddavidDavid

2.80231 Huy hiệu bạc16 Huy hiệu đồng31 silver badges16 bronze badges

Vẫn còn hiệu lực sau tất cả những năm này! Hãy chắc chắn rằng bạn cắt $ meatherName nếu đó là nội dung do người dùng xác định. Tôi không thể nhận được $ this-> $ Methodname để làm việc cho đến khi tôi nhận thấy nó có một không gian hàng đầu.

Đã trả lời ngày 26 tháng 1 năm 2016 lúc 22:23Jan 26, 2016 at 22:23

SnapeysnapeySnapey

2.8341 Huy hiệu vàng19 Huy hiệu bạc15 Huy hiệu đồng1 gold badge19 silver badges15 bronze badges

4

Làm thế nào để gọi phương thức một cách linh hoạt trong PHP?

Để làm như vậy, chúng ta có thể gọi bất kỳ phương thức nào một cách linh hoạt. Để gọi một phương thức có nghĩa là chúng ta có thể gán tên phương thức cho bất kỳ biến nào và gọi phương thức bằng cách sử dụng biến đó, trong trường hợp chuyển đổi của khối khác hoặc bất kỳ nơi nào tùy thuộc vào yêu cầu của chúng tôi.assign method name to any variable and call the method using that variable, either in switch case of if else block or anywhere depending on our requirement.

Làm thế nào để bạn gọi một phương thức một cách linh hoạt?

Trong cuộc gọi phương thức động, các tham số không được truyền trong ngoặc đơn.Cú pháp của lệnh gọi phương thức động giống như cuộc gọi mô -đun hàm.Câu lệnh call_method bây giờ chỉ nên được sử dụng cho cuộc gọi phương thức động.Nó là không cần thiết, và do đó lỗi thời, đối với cuộc gọi phương thức tĩnh.The syntax of the dynamic method call is like that of a function module call. The CALL_METHOD statement should now only be used for the dynamic method call. It is unnecessary, and therefore obsolete, for the static method call.

Làm thế nào để bạn gọi một phương thức lớp trong PHP?

Khi gọi một lớp không đổi bằng cách sử dụng cú pháp $ glassName :: hằng số, tên lớp thực sự có thể là một biến.Kể từ Php 5.3, bạn có thể truy cập hằng số lớp tĩnh bằng cách sử dụng tham chiếu biến (ví dụ: className :: $ varconstant).$classname :: constant syntax, the classname can actually be a variable. As of PHP 5.3, you can access a static class constant using a variable reference (Example: className :: $varConstant).

Động có nghĩa là gì trong PHP?

Một biến của một biến có giá trị của một biến và luồng là tên của một biến.Đây là tính năng mới của việc sử dụng các biến và bằng cách sử dụng các dấu hiệu đô la kép.Kỹ thuật này được gọi là một biến động trong PHP.Những biến đó bạn có thể sử dụng một biến được tạo động của biến cũng như khái niệm OOP.new feature of using variables and by using double dollar signs. This technique is called a dynamic variable in PHP. Those variables you can use a dynamically generated variable of variable as well as OOP Concept.