giải thích đơn giản PHP OOP so với thủ tục?


106

Tôi muốn học PHP và muốn có Ý tưởng về OOP và Thủ tục. Tôi đã đọc một số blog và hướng dẫn khác về OOP so với thủ tục nhưng tôi vẫn không thể hiểu cách tiếp cận.

OOP so với thủ tục

  1. Tôi nên học cái nào?
  2. Sự khác biệt trong mã là gì? những ảnh hưởng là gì?
  3. Làm thế nào để một khuôn khổ PHP có thể trợ giúp trong OOP aproach? (Tôi muốn học CodeIgniter)
  4. Thủ tục có cần Khung không?

Tôi thực sự muốn biết sự khác biệt về mã của cả hai, hiểu biết của tôi về OOP là bạn tạo một lớp như thế nào và nó có thể được truy cập. (Tôi không biết nếu điều đó chính xác).

Cảm ơn!



1
mặt khi đây không phải là một liên kết rất dài đơn
Félix Gagnon-Grenier



Câu trả lời:


279

Bối cảnh: Bạn đã yêu cầu một "giải thích đơn giản" gợi ý:

  1. Bạn muốn có một cái nhìn tổng quan không vô nghĩa mà không có biệt ngữ
  2. Bạn muốn thứ gì đó sẽ giúp bạn học lại từ đầu
  3. Bạn đã phát hiện ra rằng không có hai người nào trả lời câu hỏi theo cùng một cách , và điều đó thật khó hiểu. Đó là lý do bạn ở đây yêu cầu một lời giải thích đơn giản. Đúng?

Câu trả lời ngắn gọn không có biệt ngữ:

  1. Nhiều giải thích giới thiệu nhanh chóng chuyển sang các ví dụ "thế giới thực OOP". Những thứ đó có thể gây nhầm lẫn nhiều hơn là trợ giúp, vì vậy hãy bỏ qua điều đó ngay bây giờ.
  2. Bạn có thể nghĩ về mã nguồn đơn giản là "các khối" chức năng, chỉ tình cờ được lưu vào các tệp riêng lẻ.
  3. Có nhiều cách khác nhau để tổ chức những "khối" đó; tùy thuộc vào những thứ như quy ước của ngôn ngữ lập trình, nền tảng và đào tạo của (các) nhà phát triển hoặc chỉ đơn giản là sở thích cá nhân cũ.
  4. OOP và lập trình theo thủ tục đơn giản là hai phương pháp luận chính, được công nhận chung, về cách tổ chức và sắp xếp các "đoạn" mã đó.

Câu trả lời không có biệt ngữ dài:

Thủ tục so với OOP chỉ là một khía cạnh của vấn đề cơ bản của lập trình máy tính: làm thế nào để mã của bạn dễ hiểu và là một miếng bánh để duy trì một cách chuyên nghiệp . Bạn thực sự có thể viết mã "Thủ tục" tuân theo một số nguyên tắc của OOP, vì vậy cả hai không nhất thiết đối lập nhau.

Sự hiểu biết của bạn sẽ thực sự phát triển khi bạn học các ngôn ngữ lập trình hướng đối tượng khác , trong đó PHP là một "đứa trẻ mới bắt đầu".

Dưới đây là tổng quan nhanh về những gì bạn sẽ học được khi xây dựng kinh nghiệm:

  • Bạn có thể viết mã nguồn PHP thực hiện các nhiệm vụ hữu ích
  • Bạn có thể sắp xếp các nhiệm vụ hữu ích thành các "đoạn"
  • Bạn có thể nghĩ về các "đoạn" mã độc lập với các tệp riêng lẻ nơi chúng được lưu
  • Đôi khi những "đoạn" mã đó sẽ hoạt động khác nhau dựa trên các tham số bạn truyền vào
  • Các đoạn mã chấp nhận các tham số được gọi là "Hàm"
  • Các chức năng có thể được "chia nhỏ" với nhau và có nhiều cách khác nhau để thực hiện việc này:
    • Ví dụ: bạn có thể chỉ có một tệp PHP lớn với tất cả các hàm bạn đã từng viết trong cả cuộc đời, được liệt kê theo thứ tự bảng chữ cái theo tên hàm
    • Ví dụ: bạn có thể có nhiều tệp PHP với các hàm được kết hợp với nhau theo chủ đề [ví dụ: hàm để thực hiện thao tác chuỗi cơ bản, hàm xử lý mảng, hàm cho đầu vào / đầu ra tệp, v.v.]
  • OOP là một cách đặc biệt để "gộp" các Chức năng lại với nhau thành một "Lớp"
  • Lớp chỉ là một cấp độ khác của"phân khúc" với nhau để bạn có thể coi nó như một thể thống nhất
  • Một lớp có thể được coi là "tập hợp" các phương thứcthuộc tính

    • các phương thức chỉ đơn giản là các hàm liên quan một cách logic với nhau theo một cách nào đó có ý nghĩa. Các từ "phương pháp" và "chức năng" về cơ bản là hai thuật ngữ khác nhau cho cùng một thứ.
    • thuộc tính chỉ đơn giản là các giá trị dữ liệu có liên quan đến lớp. Đây là những giá trị được cố ý không tách biệt với bất kỳ hàm riêng lẻ nào, vì nhiều hơn một trong các hàm trong lớp phải có quyền truy cập vào chúng.
      • Ví dụ : nếu lớp của bạn có một loạt các phương thức để thực hiện thiên văn học, các thuộc tính của lớp có thể là các giá trị cho một số con số nổi tiếng nhất định mà tất cả các phương pháp thiên văn học cần biết (như Pi, tốc độ ánh sáng, khoảng cách giữa các hành tinh cụ thể, Vân vân.).
    • Đây là nơi mà hầu hết các giải thích OOP trở nên khó hiểu vì chúng phân nhánh thành " các ví dụ trong thế giới thực " có thể nhanh chóng lạc đề . Thông thường, "thế giới thực" là một từ ngữ chỉ các quan điểm bản thể học của một cá nhân cụ thể. Điều đó có xu hướng hữu ích chỉ khi bạn đã hiểu khái niệm đủ tốt để dạy nó cho người khác.
    • Để hiểu OOP mà không nhầm lẫn, bạn có thể bỏ qua các ví dụ "thế giới thực" ngay bây giờ và chỉ tập trung vào mã. Lớp chỉ đơn giản là một cách để lưu trữ các hàm (hay còn gọi là phương thức) và thuộc tính (hay còn gọi là dữ liệu) dưới dạng PHP trong một hoặc nhiều "phần" có liên quan trong đó mỗi "phần" riêng lẻ xử lý một chủ đề hoặc một phần chức năng cụ thể. Đó là tất cả những gì bạn cần biết để bắt đầu.
  • Lớp hữu ích vì nó cho phép bạn tổ chức mã của mình ở cấp rất cao theo cách giúp bạn dễ hiểu, sử dụng và bảo trì.

  • Khi ai đó đã viết nhiều hàm, và sắp xếp chúng thành nhiều Lớp, và khiến chúng hoạt động cùng nhau theo một cách nào đó hay ho, họ sẽ gói toàn bộ lại và gọi nó là "Khung" .
  • Framework chỉcấp độ cao nhất tiếp theo của "phân khúc" (bao gồm cả phong cách mã hóa và quy ước) mà một hoặc nhiều người đồng ý vì họ thích cách mã được tổ chức và nó phù hợp với phong cách làm việc, sở thích, giá trị, kế hoạch của họ sự thống trị, v.v.

Xem thêm


1
@dreftymac: bạn có thể cung cấp cho tôi phản hồi về những gì có thể được cải thiện trong các bổ sung của tôi, thay vì xóa nó sau lưng tôi một cách vụng về. Có thật không. Tôi hoan nghênh những phê bình mang tính xây dựng và tôi mời bạn cũng làm như vậy.
Flavius

1
@Flavius ​​Được. Biết ơn vì đã nỗ lực và dành một chút thời gian để bổ sung. Sau khi suy nghĩ về nó, có vẻ như hợp lý rằng sự bổ sung bạn đã thực hiện xứng đáng với câu trả lời độc lập của riêng nó.
dreftymac 14/02/12

2
Một bổ sung: Một lớp cũng hữu ích để phân chia dữ liệu hàm với nhau để bạn không phải chuyển nó xung quanh trong các tham số.
chiborg

1
+1 đặc biệt cho định nghĩa của bạn về "Khuôn khổ". Tôi đã nghe nhiều người cố gắng giải thích framework là gì, và tôi nghĩ cái của bạn là dễ hiểu nhất.
TecBrat

1
bạn đời ... đây là lời giải thích hay nhất mà tôi đã đọc về oop so với thủ tục và tôi đã đọc RẤT NHIỀU! công việc tuyệt vời thực sự hiệu quả, đơn giản và đi thẳng vào vấn đề. bạn đúng, mọi người luôn sử dụng các ví dụ thực tế và nó không phải là một cách dễ dàng để hiểu bất cứ điều gì, nó là tào lao!
thechrishaddad

25

OOP không hơn gì một mẫu thiết kế. Nếu bạn mới bắt đầu thì hãy học những điều cơ bản bằng cách tập trung vào cách tiếp cận thủ tục. Quan trọng nhất, hãy làm quen với các nguyên tắc cơ bản như vòng lặp, điều kiện và gọi các thủ tục khác.

Trong khi bạn đang tạo mã thủ tục của mình, hãy tạo thói quen bằng cách thêm các phương thức liên quan bên trong một tệp nguồn duy nhất. Học cách chia các thủ tục của bạn thành các đơn vị logic và sau đó bạn đã bắt đầu trở thành hướng đối tượng. Về cơ bản, một đối tượng không gì khác hơn là một tập hợp các phương thức có liên quan với nhau, đơn giản vì chúng hoạt động trên cùng một tập dữ liệu. (Không nói về cơ sở dữ liệu ở đây, mà là dữ liệu ứng dụng!)

OO chủ yếu được sử dụng để làm cho mã của bạn logic hơn bằng cách chia mọi thứ thành các khối đơn giản. Bằng cách kết hợp các khối phù hợp, bạn sẽ có được một ứng dụng hoàn chỉnh. OO không phải là viên đạn bạc hay chiếc búa vàng sẽ giải quyết mọi vấn đề của bạn. Nhưng những gì nó làm là làm cho mã của bạn dễ hiểu hơn.

Sau đó, một số người vẫn cố gắng tạo ra một mớ hỗn độn hoàn chỉnh từ các vật thể, chỉ đơn giản bằng cách biến chúng thành những siêu vật thể khổng lồ bằng hàng trăm phương pháp. Các đối tượng như vậy không khác nhiều so với cách tiếp cận theo thủ tục thông thường, đơn giản là vì số lượng lớn các phương thức được kết hợp với nhau mà không có bất kỳ logic thực sự nào. Đó là một sai lầm dễ mắc phải khi mọi người bắt đầu thực hiện OOP quá nhanh.


3
Tôi thấy một số mã OOP còn khó hiểu hơn .. hãy thử nhìn vào phần bụng của prestashop chẳng hạn.
AndrewC

Điểm tuyệt vời về Pretashop. Bản thân Magento là một con quái vật hấp dẫn, nhưng chúng tôi quyết định ở lại với nó vì các lựa chọn thay thế như Pretashop hoặc WooComm thậm chí còn tệ hơn.
PKHunter

6

Bạn nên học cả hai. Các đối tượng chỉ là một trong số rất nhiều sự trừu tượng có thể tồn tại, và sự trừu tượng cuối cùng là điều mà lập trình hướng tới. Điều đó nói rằng, hãy bắt đầu với nội dung thủ tục, và sau đó thêm các đối tượng sau đó, bởi vì nội bộ của các đối tượng PHP dù sao cũng là thủ tục.

Đối với khuôn khổ; đầu tiên học các nguyên tắc cơ bản của ngôn ngữ, viết các chương trình thử nghiệm tạm thời và những thứ tương tự. Sau đó, bạn có thể tự làm quen với các framework và tự xem xét liệu bạn có thấy một số trong số chúng hữu ích trong một số ngữ cảnh hay không. Chúng chắc chắn không phải là bắt buộc.


6

Để thêm vào những câu trả lời tuyệt vời ở trên. Bạn nên xem OOP như một sự tiến triển tự nhiên của phong cách viết mã của mình - khi bạn bắt đầu viết một chương trình nhỏ, bạn có thể chỉ cần tập hợp một vài dòng mã php lại với nhau, sau đó nhóm chúng thành các hàm và càng viết nhiều hàm thì bạn có thể cảm thấy cần. để tổ chức chúng thành các lớp tốt hơn. OOP chỉ để cho cấu trúc mã của bạn tốt hơn - cho phép bảo trì mã tốt hơn.


6

Thủ tục php và oop sử dụng cùng một mã php. Sau đó, chỉ có sự khác biệt là với thủ tục, bạn tập trung vào một nhiệm vụ và thế là xong. Trên thực tế, bạn sắp xếp mã của mình bằng cách sử dụng các mẫu hoặc các đoạn mã có thể được sử dụng lại trong nhiều lĩnh vực khác nhau của mã.

Câu trả lời đơn giản là bạn cần biết và hiểu về php. Bạn có thể tìm hiểu nó tại php.net. Khi bạn hiểu nó, bạn có thể bắt đầu sắp xếp mã của mình thành từng đoạn.

Mã thủ tục sử dụng các hàm, biến.

Khi bạn hiểu rõ mọi thứ, bạn có thể bắt đầu tổ chức các hàm và biến thành các lớp. Chúng ta bắt đầu gọi các hàm dưới dạng phương thức và biến là thuộc tính.

Chúc may mắn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.