Hướng dẫn what is dynamic method in php? - phương thức động trong php là gì?

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 what is dynamic method in php? - phương thức động trong php là gì?

VirtuosimediavirtuosimediaVirtuosiMedia

50,5K21 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 what is dynamic method in php? - phương thức động trong php là gì?

LXG

11.6K12 Huy hiệu vàng48 Huy hiệu bạc71 Huy hiệu đồng12 gold badges48 silver badges71 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 what is dynamic method in php? - phương thức động trong php là gì?

Fabricio

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

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

Hướng dẫn what is dynamic method in php? - phương thức động trong php là gì?

RodolfonetorodolfonetoRodolfoNeto

4735 Huy hiệu bạc4 Huy hiệu đồng5 silver badges4 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

517K126 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.6K13 Huy hiệu vàng66 Huy hiệu bạc96 Huy hiệu Đồng13 gold badges66 silver badges96 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.8591 Huy hiệu vàng19 Huy hiệu bạc15 Huy hiệu đồng1 gold badge19 silver badges15 bronze badges

4

Hàm động PHP là gì?

Hàm động gọi có thể gán tên hàm là chuỗi cho các biến và sau đó xử lý các biến này chính xác như chính bạn sẽ tự tên.It is possible to assign function names as strings to variables and then treat these variables exactly as you would the function name itself.

Chức năng động trong Java là gì?

Phương pháp động vật là cơ chế trong đó một cuộc gọi đến phương thức ghi đè được giải quyết tại thời điểm chạy thay vì thời gian biên dịch.Đây là một khái niệm quan trọng vì cách Java thực hiện đa hình thời gian chạy.the mechanism in which a call to an overridden method is resolved at run time instead of compile time. This is an important concept because of how Java implements run-time polymorphism.