Tôi đang ở trong một tình huống mà tôi cần để khởi tạo một lớp với các đối số từ bên trong một thể hiện của một lớp khác. Đây là nguyên mẫu:PHP: Làm thế nào để khởi tạo một lớp với các đối số từ bên trong một lớp khác
//test.php
class test
{
function __construct($a, $b, $c)
{
echo $a . '<br />';
echo $b . '<br />';
echo $c . '<br />';
}
}
Bây giờ, tôi cần phải nhanh chóng trên lớp sử dụng dưới đây cls lớp của chức năng:
class myclass
{
function cls($file_name, $args = array())
{
include $file_name . ".php";
if (isset($args))
{
// this is where the problem might be, i need to pass as many arguments as test class has.
$class_instance = new $file_name($args);
}
else
{
$class_instance = new $file_name();
}
return $class_instance;
}
}
Bây giờ khi tôi cố gắng để tạo ra một thể hiện của lớp thử nghiệm trong khi đi tranh cãi cho nó:
$myclass = new myclass;
$test = $myclass->cls('test', array('a1', 'b2', 'c3'));
Lỗi: Thiếu đối số 1 và 2; chỉ đối số đầu tiên được thông qua.
Điều này làm việc tốt nếu tôi khởi tạo một lớp không có đối số trong hàm hàm tạo của nó.
Đối với các nhà phát triển PHP có kinh nghiệm, ở trên không phải là vấn đề lớn. Hãy giúp tôi.
Cảm ơn
Không liên quan đến câu hỏi của bạn, nhưng $ args sẽ luôn là 'isset' vì bạn gán mảng() vào trong định nghĩa hàm. Bạn có thể quan tâm đến 'empty', hoặc' $ args = null'. – Tordek
Tôi xin lỗi, điều này cũng không liên quan đến câu hỏi của bạn, nhưng những gì bạn đang làm không phải là mát mẻ. câu trả lời cho câu hỏi của bạn là: để constructor của bạn lấy một mảng, có một số thuộc tính lớp, sau đó xử lý mảng và ánh xạ nó tới các thuộc tính lớp. Nhưng một lần nữa, bạn đang làm một cái gì đó mà không mát mẻ. – DarthVader
lớp kiểm tra và khác sẽ được thực hiện bởi các nhà phát triển khác bằng cách sử dụng cách riêng của họ với các đối số và không có nó, vì vậy tôi không muốn hạn chế họ chỉ chuyển đối số thành mảng cho các nhà xây dựng. – Sarfraz