2012-05-17 25 views
7

Tôi muốn lớp tải lười biếng nhưng không thành cônglớp tải Lazy trong PHP

<?php 

class Employee{ 

    function __autoload($class){ 

     require_once($class); 
    } 


    function display(){ 

     $obj = new employeeModel(); 
     $obj->printSomthing(); 
    } 
} 

Bây giờ khi tôi làm điều này

function display(){ 
      require_once('emplpyeeModel.php'); 
      $obj = new employeeModel(); 
      $obj->printSomthing(); 
     } 

Nó hoạt động nhưng tôi muốn tải lười biếng lớp.

Trả lời

4

Thay đổi Employee một chút:

class Employee { 

    public static function __autoload($class) { 
     //_once is not needed because this is only called once per class anyway, 
     //unless it fails. 
     require $class; 
    } 

    /* Other methods Omitted */ 
} 
spl_autoload_register('Employee::__autoload'); 
+0

cảm ơn rất nhiều ... – user4o01

1

Đầu tiên nếu tất cả tốt hơn là sử dụng spl_autoload_register() (hãy kiểm tra ghi chú trong hướng dẫn sử dụng php để tự động tải).

Sau đó quay lại vấn đề của bạn; chỉ khi hàm display() nằm trong cùng thư mục với employeeModel thì nó sẽ hoạt động. Nếu không, sử dụng đường dẫn tuyệt đối (xem thêm include()include_path setting

6

__autoload là một chức năng độc lập không phải là một phương pháp của một lớp Mã của bạn sẽ trông như thế này:.

<?php 

class Employee{ 

    function display(){ 

     $obj = new employeeModel(); 
     $obj->printSomthing(); 
    } 
} 

function __autoload($class) { 
    require_once($class.'.php'); 
} 

function display(){ 
    $obj = new Employee(); 
    $obj->printSomthing(); 
} 

CẬP NHẬT

Ví dụ lấy từ hướng dẫn sử dụng php:

<?php 
function __autoload($class_name) { 
    include $class_name . '.php'; 
} 

$obj = new MyClass1(); 
$obj2 = new MyClass2(); 
?> 
+0

Ông không nên sử dụng '__autoload' ở tất cả –

+0

@ExplosionPills Ông có thể giải thích tại sao bạn nói như vậy? Tôi tò mò bản thân mình. – sprain

+3

@sprain Ông nên viết một chức năng tự động tải được gọi là cái gì khác, có lẽ là một phần của một lớp như ông đã làm, và sau đó gọi 'spl_autoload_register'. Hãy tưởng tượng mã này là trên một trang web lớn với nhiều phụ thuộc chéo qua các trang. Điều gì sẽ xảy ra nếu ai đó đã sử dụng '__autoload' trên một ứng dụng chưa được kiểm tra, điều đó xảy ra để bao gồm tệp mà anh ta đang định nghĩa' __autoload' khác. –