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
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ạ //php.net/manual/en/ class.reflection.php
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
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[]
và 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