Tôi đã thực hiện một số kiểm tra (để thay thế mã cũ) bằng phương pháp ma thuật __invoke và tôi không chắc đây có phải là lỗi hay không:PHP5.3: Lỗi "Gọi đến không xác định" khi gọi điện từ biến lớp
Hãy giả sử chúng ta có một lớp:
class Calc {
function __invoke($a,$b){
return $a*$b;
}
}
sau đây là khả thi và hoạt động mà không có vấn đề gì:
$c = new Calc;
$k = $c;
echo $k(4,5); //outputs 20
Tuy nhiên nếu tôi muốn có một lớp để lưu trữ một thể hiện của đối tượng đó , này không làm việc:
class Test {
public $k;
function __construct() {
$c = new Calc;
$this->k = $c; //Just to show a similar situation than before
// $this-k = new Calc; produces the same error.
}
}
Lỗi này xảy ra khi chúng ta cố gắng gọi nó thích:
$t = new Test;
echo $t->k(4,5); //Error: Call to undefined method Test::k()
Tôi biết rằng một "giải pháp" có thể là để có một hàm bên trong thử nghiệm lớp (tên là k) để "chuyển tiếp" cuộc gọi bằng cách sử dụng call_user_func_array nhưng điều đó không phải là thanh lịch.
Tôi cần giữ trường hợp đó trong một lớp chung (cho mục đích thiết kế) và có thể gọi nó là hàm từ các lớp khác ... bất kỳ đề xuất nào?
Cập nhật:
tôi tìm thấy một cái gì đó thú vị (ít nhất là cho mục đích của tôi):
Nếu chúng ta định giá trị "biến lớp học" vào một biến địa phương hoạt động:
$t = new Test;
$m = $t->k;
echo $m(4,5);
Vui lòng cung cấp ví dụ về mã hoàn chỉnh cho biết sự cố của bạn. Mẫu mã bạn nói tác phẩm không hoạt động và mẫu mã bạn nói cho một vấn đề hoạt động. – Sjoerd
Có, xin lỗi, xấu của tôi ... Tôi cập nhật nó. Sjoerd: Ví dụ đó có phù hợp với bạn không? lạ: S – lepe