2013-10-31 18 views
5

ở đây để hỏi có bất kỳ lỗi nào cho lớp/chức năng tự động tải của tôi với spl_autoload_register không?Lỗi ngoại lệ logic: Mảng được truyền không chỉ định phương thức tĩnh hiện có

đánh giá cao sự trợ giúp.

đây là mã của tôi

<?php 

namespace system\core; 

// if(!defined('IN_APP')){ 
    // exit('Access Denied'); 
// } 

define('ROOT', $_SERVER['DOCUMENT_ROOT']); 
define('DS', DIRECTORY_SEPARATOR); 

if(function_exists('spl_autoload_register')){ 

    spl_autoload_register(array('core', 'autoload')); 

}else{ 

    function __autoload($class){ 

     return core::autoload($class); 

    } 

} 

A:createapp(); 

class core 
{ 

    private static $_app; 

    public static function createapp(){ 

     if(!is_object(self::$_app)){ 

      self::$_app = 'something'; 

     } 

     return self::$_app; 
    } 

    public static function autoload($class){ 

     $class = trim(strtolower($class)); 

     if(strpos($class, '\\') !== false){ 

      $path = ROOT; 

      $path .= DS . $class . '.php'; 

      $path = preg_replace('/[\\|\/]/i', DS, $path); 

      require_once($path); 

     } 

    } 

} 

class A extends core {} 

và tôi đã nhận lỗi này

Fatal error: Uncaught exception 'LogicException' with message 'Passed array does not specify an existing static method (class 'core' not found)' in C:\xampp\htdocs\test\system\core.php:14 Stack trace: #0 C:\xampp\htdocs\test\system\core.php(14): spl_autoload_register(Array) #1 {main} thrown in C:\xampp\htdocs\test\system\core.php on line 14 

sau khi tôi đọc msg lỗi, nó có nghĩa là không tìm thấy lõi lớp học? nhưng lớp được viết trong cùng một tệp ???

Trả lời

4

Bạn phải đặt tên đủ điều kiện. Bởi vì lớp học của bạn là trong system\core namespace:

spl_autoload_register(array('system\core\core', 'autoload')); 
+0

Cảm ơn, nó làm việc, quên tôi đang sử dụng không gian tên, sẽ thiết lập nó như là câu trả lời sau 2 phút – geass

+0

Tôi đang gặp vấn đề tương tự. Trong trường hợp của tôi, lớp chứa hàm tự động nạp nằm trong một tệp khác từ lệnh gọi 'spl_autoload_register'. Nó hoạt động khi tôi sao chép lớp vào cùng một tệp với lệnh gọi 'spl_autoload_register'. –

Các vấn đề liên quan