2012-06-27 38 views
7

Tôi có nên bao gồm/require_once lớp cha mà tôi đang mở rộng trong PHP không?Việc mở rộng một lớp cha trong PHP có yêu cầu tệp với lớp đang được đưa vào không?

ví dụ tôi có một lớp được gọi là Shapes

class Shapes { 

} 

Và sau đó tôi đã tạo một lớp con gọi là

require_once('shapes.php'); 

class Circle extends Shapes { 

} 

Tôi có nên yêu cầu các tầng lớp phụ huynh khi tôi đang mở rộng? hoặc chỉ nên sử dụng mở rộng lớp con cho lớp cha của nó ngay cả khi chúng ở trong cùng một thư mục?

+4

bạn đã xem tự động tải chưa? http://www.php.net/manual/en/language.oop5.autoload.php –

Trả lời

13

Bạn cần phải làm một điều gì đó để cho phép PHP xem định nghĩa lớp cơ sở của bạn trước khi nó có thể xử lý lớp con, nếu không sẽ xảy ra lỗi nghiêm trọng.

Điều này có thể là hướng dẫn sử dụng require_once của tệp lớp cơ sở hoặc autoloading (có các tùy chọn khác để tự động tải, nhưng spl_autoload_register là tùy chọn bạn nên sử dụng).

Cách tiếp cận sử dụng nào phụ thuộc vào phạm vi: khi mã hóa một dự án thử nghiệm nhỏ thiết lập tự động tải có thể quá mức cần thiết. Nhưng khi cơ sở mã ngày càng lớn hơn, việc tải tự động trở nên hấp dẫn hơn vì:

  • nó có thể ẩn logic phân giải tệp nguồn phức tạp (ví dụ: nếu bạn có thư mục cấu hình cho lớp cơ sở))
  • nó có thể được cấu hình từng bước: bạn có thể sử dụng nhiều autoloaders mà chạy như một chuỗi, và mỗi mô-đun độc lập của ứng dụng có thể đăng ký autoloader độc lập của mình mà cùng tồn tại hòa bình với tất cả những người khác
2

có, bạn có để bao gồm nó nếu lớp đó không được khai báo trong cùng một tệp.

Cũng có một tính năng gọi là Autoloading Classes mà bạn có thể tạo một hàm như thế này:

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

Và nó sẽ tự động bao gồm các lớp học mà không được tìm thấy trong phạm vi hiện

Ngoài ra bạn cũng có thể đọc về tính năng này: autoload_register

1

Bạn cũng có thể sử dụng nhà soạn nhạc để đơn giản hóa quy trình.

Hãy composer.json như thế này

{ 
... 
    "autoload": { 
     "psr-4": { 
      "": "src/" 
     } 
    }, 
... 
} 

Nhận nhà soạn nhạc từ https://getcomposer.org/ và chạy composer install. Bạn nên tải kịch bản autoload nhà soạn nhạc của một lần như

require_once __DIR__ . '/vendor/autoload.php'; 

Nếu bạn có PHP ít hơn 5.3.0 sau đó thay thế __DIR__ với dirname(__FILE__).

Và đặt tệp của bạn vào src thư mục.Ví dụ: nếu bạn có lớp Acme\Utils\FooBar thì nó phải ở trong src/Acme/Utils/FooBar.php.

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