PHP có thể mở rộng nhiều lớp không?

Thường thì bạn cần các lớp có các biến và chức năng tương tự với một lớp hiện có khác. Trên thực tế, nên xác định một lớp chung có thể được sử dụng trong tất cả các dự án của bạn và điều chỉnh lớp này cho phù hợp với nhu cầu của từng dự án cụ thể của bạn. Để tạo thuận lợi cho việc này, các lớp có thể là phần mở rộng của các lớp khác. Lớp mở rộng hoặc lớp dẫn xuất có tất cả các biến và chức năng của lớp cơ sở [cái này được gọi là 'kế thừa' mặc dù thực tế là không có ai chết] và những gì bạn thêm vào trong định nghĩa mở rộng. Không thể trừ khỏi một lớp, nghĩa là không thể xác định bất kỳ hàm hoặc biến hiện có nào. Một lớp mở rộng luôn phụ thuộc vào một lớp cơ sở duy nhất, nghĩa là không hỗ trợ đa kế thừa. Các lớp được mở rộng bằng cách sử dụng từ khóa 'extends'

class Named_Cart extends Cart {
    var $owner;

    function set_owner [$name] {
        $this->owner = $name;
    }
}
?>

Điều này định nghĩa một lớp Named_Cart có tất cả các biến và chức năng của Cart cùng với một biến bổ sung $owner và một hàm bổ sung set_owner[]. Bạn tạo một giỏ hàng được đặt tên theo cách thông thường và bây giờ có thể đặt và nhận chủ sở hữu xe đẩy. Bạn vẫn có thể sử dụng các chức năng giỏ hàng bình thường trên các giỏ hàng được đặt tên

$ncart = new Named_Cart;    // Create a named cart
$ncart->set_owner["kris"];  // Name that cart
print $ncart->owner;        // print the cart owners name
$ncart->add_item["10", 1];  // [inherited functionality from cart]
?>

Đây còn được gọi là mối quan hệ "cha-con". Bạn tạo một lớp, cha và sử dụng phần mở rộng để tạo một lớp mới dựa trên lớp cha. lớp học trẻ em. Bạn thậm chí có thể sử dụng lớp con mới này và tạo một lớp khác dựa trên lớp con này

Notă

Các lớp phải được định nghĩa trước khi chúng được sử dụng. Nếu bạn muốn lớp Named_Cart mở rộng lớp Cart, bạn sẽ phải định nghĩa lớp Cart trước. Nếu bạn muốn tạo một lớp khác có tên là Yellow_named_cart dựa trên lớp Named_Cart, trước tiên bạn phải định nghĩa Named_Cart. Để làm cho nó ngắn. thứ tự mà các lớp được xác định là quan trọng

Trong bài viết trước tôi đã đề cập ngắn gọn rằng bạn không thể mở rộng nhiều lớp cùng một lúc. Nhưng bản thân lớp cha có thể là một lớp con và mở rộng một lớp của chính nó. Trong bài viết này, chúng tôi sẽ dọn dẹp lớp Dog của chúng tôi. Chúng tôi đã chuyển gần như mọi thứ từ lớp GermanShepherd sang lớp Dog, nhưng có một số thuộc tính và phương thức có thể mạo hiểm hơn nữa cho các lớp Động vật có vú và Động vật

Trước khi đi vào vấn đề đó, chúng ta hãy xem lại Kế thừa với lớp Car mà chúng ta đã không trình bày trong bài viết trước

PHP — P53. Kế thừa lớp

Ai có thể đoán được rằng PHP hỗ trợ kế thừa?

Blog. thiên tài. io

Lớp Car chứa các hằng số như HAS_HEADLIGHTS, HAS_TAIL_LIGHTS và HAS_TURN_SIGNALS. Nếu bạn nghĩ về ô tô nói chung, mỗi chiếc xe sẽ có đèn pha, đèn hậu và xi nhan, nhưng không phải chiếc xe nào cũng có những thứ đó. Vì vậy, chúng tôi sẽ để những thứ đó bên trong lớp Xe hơi

Bây giờ, hãy xem các thuộc tính Ô tô của chúng tôi. Mỗi phương tiện sẽ chứa một năm, nhà sản xuất và mô hình, nhưng không phải phương tiện nào cũng cần chạy bằng nhiên liệu. nghĩ xe ngựa. Chúng ta sẽ để thuộc tính Fuel_type bên trong đối tượng Car. Tương tự, mã lực, mô-men xoắn, hộp số, loại xe [dù là coupe hay sedan. không phải là một tên thuộc tính tuyệt vời mà tôi biết] và car_on có thể ở bên trong lớp Car. Kích thước có thể di chuyển đến lớp Xe vì mỗi xe sẽ có kích thước. Vì các thuộc tính riêng tư đang di chuyển lên Xe, chúng tôi sẽ cần thay đổi công cụ sửa đổi khả năng hiển thị của chúng thành được bảo vệ nếu chúng tôi muốn truy cập chúng từ lớp Xe hơi, điều mà chúng tôi thực hiện

Các bộ truy cập và bộ biến đổi cho các thuộc tính mà chúng ta đã chuyển lên lớp Xe cũng có thể được chuyển sang lớp Xe. Điều đó hoàn thành việc di chuyển các phần tử của lớp Car sang lớp Xe

Tiếp theo là lớp Chó. Chúng tôi đã tạo lớp Dog bằng cách chuyển một số phần tử lên từ lớp German Shepherd. Nếu chúng tôi muốn, và chúng tôi muốn, chúng tôi có thể tiếp tục mở rộng các lớp từ lớp con sang lớp cha. Đối với ví dụ này, chúng tôi sẽ tạo thêm hai lớp. động vật có vú và động vật. Chó sẽ kế thừa từ Động vật có vú và Động vật có vú sẽ thừa kế từ Động vật. Như bạn có thể thấy rõ, các lớp có thể là trẻ em và cha mẹ cùng một lúc. Lớp Chó là cha mẹ của Chó chăn cừu Đức, nhưng nó là con của Động vật có vú

Chúng ta không cần phải nhìn vào lớp GermanShepherd của mình nữa vì chúng ta đã chuyển mọi thứ có thể chuyển sang lớp Dog. Tuy nhiên, nhìn vào lớp Dog của chúng ta, chúng ta có thể thấy rằng có một vài phần tử có thể được di chuyển lên, chẳng hạn như hằng số HAS_HEART. Di chuyển HAS_TAIL lên trên không hợp lý vì không phải tất cả Động vật có vú và Động vật đều có đuôi. Hằng số HAS_HEART có thể di chuyển lên lớp Động vật

Màu mắt là thứ mà tất cả các loài động vật có vú đều có vì động vật không cần phải có mắt [tôi nghĩ vậy]. Ngày sinh là một đặc tính của động vật, vì vậy chúng ta có thể di chuyển DOB lên tận lớp Động vật

Ngành, lớp, thứ tự, v.v., có thể được chuyển lên lớp Động vật, nhưng chúng sẽ cần được khởi tạo sau vì không phải tất cả Động vật đều thuộc cùng một phân loại. Vương quốc nên được giữ như Animalia

Đối với mỗi thuộc tính mà chúng tôi đã chuyển lên, chúng tôi cũng có thể chuyển lên các phương thức getter và setter của chúng. Ngủ có vẻ như là một việc của động vật, vì vậy chúng ta sẽ chuyển phương thức sleep[] vào lớp Animal. Cuối cùng, vì chúng tôi chưa tạo getters và setters cho các đặc điểm phân loại, chúng tôi sẽ tạo chúng ngay bây giờ [i. e. getKingdom[]]. Phương thức duy nhất mà chúng tôi sẽ không thêm là setKingdom[] bên trong lớp Animal của chúng tôi, vì chúng tôi không muốn bất kỳ ai sửa đổi vương quốc Animal của chúng tôi từ Animalia

Và đó là nó. GermanShepherd của chúng tôi hiện có quyền truy cập vào các thuộc tính và phương thức từ các lớp Chó, Động vật có vú và Động vật. Chúng tôi cũng đặt các thuộc tính bên trong các lớp cha trực tiếp từ lớp GermanShepherd của chúng tôi. Ví dụ: ngày sinh được chuyển khi lớp GermanShepherd được khởi tạo và được đặt bên trong lớp Animal. Chúng tôi có thể chạy các bài kiểm tra tương tự mà chúng tôi đã chạy trước đó và chúng tôi sẽ nhận được kết quả chính xác như vậy. Không tệ, kế thừa

dinocajic/php-7-youtube-tutorials

Mã cho PHP 7. x hướng dẫn trên YouTube

github. com

Dino Cajic hiện là Trưởng phòng CNTT tại LSBio [LifeSpan BioSciences, Inc. ], Kháng thể tuyệt đối, Kerafast, Everest BioTech, Nordic MUbio và Exalpha. Ông cũng là Giám đốc điều hành tại MyAutoSystem. Ông có hơn một thập kỷ kinh nghiệm về công nghệ phần mềm. Anh ấy có điểm B. S. về Khoa học Máy tính và môn phụ về Sinh học. Nền tảng của anh ấy bao gồm việc tạo ra các ứng dụng thương mại điện tử cấp doanh nghiệp, thực hiện phát triển phần mềm dựa trên nghiên cứu và tạo điều kiện phổ biến kiến ​​thức thông qua viết lách

Bạn có thể kết nối với anh ấy trên LinkedIn, theo dõi anh ấy trên Instagram hoặc Twitter hoặc đăng ký ấn phẩm Phương tiện của anh ấy

Đọc mọi câu chuyện từ Dino Cajic [và hàng nghìn nhà văn khác trên Medium]. Phí thành viên của bạn trực tiếp hỗ trợ Dino Cajic và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có toàn quyền truy cập vào mọi câu chuyện trên Phương tiện

Có thể mở rộng 2 lớp với nhau không?

Trong Java, chúng ta có thể mở rộng hai lớp bằng cách sử dụng từ khóa “extend” , nghĩa là lớp con sẽ kế thừa tất cả các lớp . Ở đây, Child đại diện cho lớp con và Parent biểu thị lớp Parent. Java hỗ trợ kế thừa đơn nhưng không hỗ trợ đa kế thừa.

Tại sao chúng tôi không thể mở rộng nhiều lớp?

"Một lớp mở rộng hai lớp" trái với đặc điểm kỹ thuật của ngôn ngữ . Nếu bạn không muốn xem xét các giao diện, điều đó không thể thực hiện được.

Một lớp có thể mở rộng trực tiếp bao nhiêu lớp?

Một lớp mở rộng một lớp khác bằng cách sử dụng từ khóa extends trong định nghĩa lớp. Một lớp chỉ có thể mở rộng một lớp khác , nhưng nó có thể triển khai nhiều hơn một giao diện.

Chủ Đề