2011-12-15 34 views
7

Tôi đang tìm cách tải các lớp vào PHP mà không cần sử dụng các tên đã được hardwired.Tải các lớp PHP từ chuỗi

Ý tưởng là tập lệnh sẽ tải tệp văn bản có tên là 'thành phần' (lớp), sau đó tải chúng bằng tên trong tệp. Ví dụ:

<xml><Classes><class name="myClass"/></Classes></xml> 

Khi PHP được chạy, nó sẽ cần phải làm một cái gì đó như thế này:

require_once {myClass}".class.php"; 
var myclass = new {myClass}(); 

Trả lời

3

Ví dụ của bạn gần như đúng. Bạn chỉ có thể thay thế {myClass} bằng $ myClass và nó sẽ hoạt động.

Dưới đây là một ví dụ đơn giản về cách này có thể được sử dụng:

File: myClass.class.php 

<?php 
    class myClass { 
     public $myVar = 'myText'; 
    } 
?> 

File: test.php 

<?php 
    $className = "myClass"; 
    require_once $className . ".class.php"; 
    $myInstance = new $className; 
    echo $myInstance->myVar; 
?> 

này phải in ra "myText" vào màn hình, nội dung của tài sản lớp động bao gồm của bạn.

+0

Ngoài ra, nếu bạn đang cần để kéo tên lớp từ xml, bạn có thể làm điều đó một cách đơn giản như gọi một cách đơn giản [preg_match()] (http : //us2.php.net/manual/en/function.preg-match.php). Nhận xét nếu bạn muốn xây dựng về chủ đề đó. –

+0

PHP là tuyệt vời theo cách đó; nó rất linh hoạt về tên và cách gõ. –

0

Sử dụng ReflectionClass cho việc này.

require_once $class . ".class.php"; 

$refl = new \ReflectionClass($class); 

$params_for_construct = array($param1, param2); 

$instance = $refl->newInstanceArgs($params_for_construct); 
0

Tại sao không chỉ cần sử dụng autoloader

spl_autoload_register(function ($class) { 
    require 'class_folder/' . $class . '.class.php'; 
}); 
Các vấn đề liên quan