NAMESPACE PHP LÀ GÌ

Xin chào toàn bộ những người. Hôm nay bản thân đang quay lại phần 2 vào bài viết về lập trình sẵn hướng đối tượng người tiêu dùng trong PHP. Trong phần một mình đã nói về tía vấn đề Các đặc điểm cơ bản của lập trình phía đối tượng người dùng. Chúng được biểu đạt như thế nào vào PHP, Sự khác biệt thân Abstract Class và InterfaceThế như thế nào là một trong những hàm static, tách biệt giải pháp cần sử dụng keywords static::method() cùng với self::method().

Bạn đang xem: Namespace php là gì

Mục lục

Phần 1

Các Điểm sáng cơ bạn dạng của xây dựng hướng đối tượng người sử dụng. Chúng được biểu hiện thế nào vào PHPSự khác biệt giữa Abstract Class cùng Interface.Thế như thế nào là một trong những hàm static. Phân biệt phương pháp cần sử dụng từ khóa static::method() cùng với self::method()

Phần 2

Thế như thế nào là TraitThế nào là NamespacesThế làm sao là magic functionsTìm đọc về các quy tắc vào PSR-2

Phần 3

Các phương pháp xây đắp hướng đối tượng người sử dụng (SOLID)

Trong phần này, bản thân đã share về 4 vấn tiếp theo sau trong loạt nội dung bài viết, kia là: Thế nào là Trait, Thế làm sao là Namespaces, Thế nào là magic functions, Tìm phát âm về các nguyên tắc vào PSR2.

Nội dung

4. Thế làm sao là Trait

Trait được trình làng vào PHP phiên phiên bản 5.4.0 và được có mang là một trong những hình thức được cho phép xây dựng viên tận dụng kĩ năng tái áp dụng lại code (code reusability) Lúc lập trình với ngôn từ chỉ chất nhận được thừa kế xuất phát từ 1 class tuyệt nhất (tuyệt còn được gọi là single inheritance) nhỏng PHP..Vậy Trait là gì?Trait là 1 trong module giúp cho chúng ta có thể thực hiện lại những cách làm được knhị báo vào trait vào những class không giống nhau hoặc trong những trait không giống một cách dễ dàng rộng là thừa kế như trước đó.Một trait tương tự như là 1 trong class tuy vậy chỉ nhằm mục tiêu mục đích đội tác dụng lại. Và trait cần thiết khởi chế tạo như là class với trait ra đời để bổ sung cập nhật cho kế thừa truyền thống cuội nguồn. Ttuyệt vì chưng đề nghị thừa kế 1 class xuất xắc interface nhằm thực hiện lại 1 đội tác dụng, thì với trait các bạn không nhất thiết phải thừa kế vẫn hoàn toàn có thể sử dụng được.Ví dụ:

class Databasepublic function listUsers()return "List User";/*** */class Report extends Databasepublic function reportUsers()$this->listUsers();/*** */class Users extends Databasepublic function index()$this->listUsers();Đây là trường vừa lòng ko thực hiện trait cùng cũng không biết cần sử dụng trait nơi đâu

*
. Mà ta thấy nếu có trường hợp có vô số class thì việc extends lại đã làm ảnh hưởng rất nhiều mang đến công việc, tài nguim, tính năng.Hướng giải quyết và xử lý như sau:

trait Databasepublic function listUsers()return "List User";/*** */class Usersuse Database;public function reportUsers()$this->listUsers();/*** */class Reportuse Database;public function reportUsers()$this->listUsers();Các bạn thấy ko, bản thân ko cần extends nhưng vẫn hoàn toàn có thể sử dụng lại các cách thức của method listUsers() nhỏng trên.Để áp dụng trait vào PHP. thì chúng ta chỉ cần cần sử dụng từ khóa use để Call trait bạn muốn áp dụng vào code của công ty. Sau kia bạn có thể thực hiện những thủ tục trong trait mà lại chúng ta đã use. lấy một ví dụ ngơi nghỉ trên mình use Database sau đó sẽ áp dụng lại được cách thức listUser() trong trait nàyÀ, mang lại đây, ta lại thấy, nếu muốn áp dụng những cách thức trong nhiều trait thì làm cho như thế nào? Tiếp tục nhé.

trait Database public function sayHello() echo "hello"; /*** */trait World public function sayWorld() echo "World"; /*** */class MyHelloWorld use Database, World; public function sayHelloWorld() emang đến "!"; $o = new MyHelloWorld();$o->sayHello();$o->sayWorld();$o->sayHelloWorld();//Kết trái : helloWorld!Các bạn hãy quan sát hình nhé. Tại phía trên bản thân bao gồm 2 trait là Hello với World đựng lần lượt thủ tục là sayHello()sayWorld().Và việc thực hiện chúng khá đơn giản dễ dàng như là thực hiện một trait vậy. quý khách rất có thể use và sử dụng những cách thức phía bên trong nó như thông thường. Có vẻ phần nhiều vật dụng vẫn ổn. Nhưng nếu một ngày không rất đẹp ttách, những cách tiến hành trong những trait giống như nhau, chúng ta đã buộc phải làm sao?Tại đây ta sẽ thực hiện insteadof nhằm xét độ ưu tiên mang lại phương thức bạn muốn áp dụng.Ví dụ :

//trait SetGetNametrait SetGetName public function setName($name) $this->name = $name; public function getName() return $this->name; public function getAll() return $this->getName(); //trait SetGetAgetrait SetGetAge public function setAge($age) $this->age = $age; public function getAge() return $this->age; public function getAll() return $this->getAge(); class ConNguoi public $name; private $age; //hotline trait use SetGetName,SetGetAge //ưu tiên thực hiện phương thức getall của trait SetGetAge SetGetAge::getAll insteadof SetGetName; Tiếp theo, chúng ta đang khám phá về một trong những phần siêu đặc trưng trong trait chính là trait lồng. Quý khách hàng đã khi nào nghĩ nếu tất cả 100 trait, ta đang use tận 100 lần. Như vậy là không nên. Nhìn khôn cùng củ chuối =)))Ví dụ:

trait Hello public function sayHello() emang đến "Hello "; trait World public function sayWorld() eđến "World!"; trait HelloWorld use Hello, World;class MyHelloWorld use HelloWorld;$o = new MyHelloWorld();$o->sayHello();$o->sayWorld();// công dụng : Hello World!Việc thực hiện trait lồng không thật phức tạp và là bí quyết hỗ trợ cho code dễ quan sát, hiệu quả hơn.

5. Thế như thế nào là namespace

Định nghĩa: Được knhị báo với từ khóa namespace. Mỗi tệp tin cất 1 namespace cần được knhị báo trên cùng trước những code không giống vào file. Cách thực hành thực tế rất tốt là mỗi tệp tin chứa 1 class cùng với tên class trùng với tên tệp tin đôi khi có 1 namespace trình bày được băng thông cho tới file đó

Knhì báo : Giống như đường truyền tới thư mục. Cách thực hành tốt nhất có thể là nên đặt namespaces theo cấu tạo tlỗi mục đựng nó, điều đó là tuyệt vời Lúc kết hợp với autoloading vào PHP..VD: Tạo 1 class HomeController cùng đánh tên như sau:

namespace AppControllers; class HomeController //codeSử dụng name space:

use AppControllersHomeController;

6. Thế nào là magic functions

Trong lập trình hướng đối tượng để triển khai cho việc thực hiện những đối tượng thuận lợi hơn, PHP cũng cung ứng một vài Magic Method, hoặc các phương thức đặc biệt quan trọng được Điện thoại tư vấn Khi các hành vi nhất định xảy ra trong số đối tượng người dùng. Như vậy chất nhận được những thiết kế viên triển khai một vài trọng trách bổ ích kha khá dễ dãi.Trong bài xích này mình xin phnghiền nói đến 2 magic function đặc trưng và hay dùng độc nhất trong lập trình phía đối tượng trong PHP. Đó là Constructors và Destructors.Trước hết bản thân xin bước vào Constructors, vậy Constructors là gì?Xét ví dụ sau:

/*** */class ClassName public $example = "Đây là trực thuộc tính của class"; public function __construct()emang lại "Đối tượng vừa mới được khởi tạo! ";public function setProperty($value)$this->example = $value;public function getProperty()return $this->example . "";$obj = new ClassName();echo $obj->getProperty();// hiệu quả : //Đối tượng vừa được khởi tạo! //Đây là ở trong tính của classCác chúng ta thấy gì nào? Sau Khi khởi chế tạo đối tượng người tiêu dùng NameClass, mau lẹ hàm __construct() đang tự động chạy. Điều này giống hệt như một bí quyết thông báo mang lại bạn lập trình sẵn.Destructors: Bản hóa học trở lại cùng với Constructors.Ví dụ:

/*** */class ClassName public $example = "Đây là nằm trong tính của class"; public function __construct()emang lại "Đối tượng vừa mới được khởi tạo! ";public function setProperty($value)$this->example = $value;public function getProperty()return $this->example . "";public function __destruct()emang đến "Đối tượng vừa bị hủy! ";$obj = new ClassName();echo $obj->getProperty();eđến "Kết thúc! ";//kết quả://Đối tượng vừa mới được khởi tạo! //Đây là trực thuộc tính của class//Kết thúc! Đối tượng vừa bị hủy! Để kích hoạt destructor một cách cụ thể, bạn cũng có thể hủy đối tượng người sử dụng Object ngay mau chóng bằng cách sử dụng hàm unset() :

/*** */class ClassName public $example = "Đây là thuộc tính của class"; public function __construct()eđến "Đối tượng vừa được khởi tạo! ";public function setProperty($value)$this->example = $value;public function getProperty()return $this->example . "";public function __destruct()echo "Đối tượng vừa bị hủy! ";$obj = new ClassName();emang đến $obj->getProperty();unset($obj);emang lại "Kết thúc! ";//kết quả://Đối tượng vừa mới được khởi tạo! //Đây là trực thuộc tính của class//Đối tượng vừa bị hủy! //Kết thúc!Tiếp theo, họ đã đi cho các hàm đặc trưng khác...__get : vẫn tự động hóa được điện thoại tư vấn Khi chúng ta lôi ra quý hiếm của những thuộc tính trong đối mà họ không được phnghiền truy cập nó từ bỏ bên phía ngoài hoặc không tồn tại.VD:

class ConNguoi private $title = "toàn quốc vô địch" ; public function __get($key) //chất vấn coi trong class bao gồm mãi sau ở trong tính ko if(property_exists($this, $key)) //tiến hành lấy giá trị return $this->$key; else die("Không sống thọ thuộc tính"); public function getTitle() emang đến $this->title; $vietnam giới = new ConNguoi();echo $vietnam->title;//Việt Nam vô địch$vietnam->age;//Không lâu dài ở trong tính__mix : sẽ auto được Gọi khi bọn họ tùy chỉnh thiết lập cực hiếm cho 1 trực thuộc tính không được phnghiền truy vấn tự bên ngoài, hoặc ko tồn tại.

class VietNam private $title; public function __set($key, $value) //kiểm tra xem vào class tất cả mãi mãi thuộc tính không if(property_exists($this, $key)) //tiến hành gán giá trị $this->$key = $value; else die("Không mãi sau trực thuộc tính"); public function getTitle() echo $this->title; $vietphái mạnh = new VietNam();$vietnam->title = "đất nước hình chữ S vô địch";$vietnam->getTitle();//toàn nước vô địch$vietnam->age = 20;//Không mãi sau trực thuộc tínhNgoài ra còn một số magic funtions tiếp sau đây mình xin phxay được liệt kê bên dưới đây:__isset() : hàm isphối, sẽ được call Lúc chúng ta tiến hành kiểm soát một ở trong tính không được phnghiền truy vấn của một đối tượng người sử dụng, tốt khám nghiệm một nằm trong tính ko vĩnh cửu trong đối tượng người dùng kia.__unset(): sẽ tiến hành Gọi khi bọn họ triển khai diệt (unset) một nằm trong tính ko được phxay truy cập của một đối tượng, giỏi diệt một nằm trong tính không sống thọ trong đối tượng người tiêu dùng kia. Cụ thể là hàm unset().__sleep() : Phương thức __sleep() sẽ được call khi họ tiến hành serialize()đối tượng người sử dụng. Đôi khi khi họ serialize()một đối tượng người sử dụng thì nó sẽ trả về toàn bộ những trực thuộc tính trong đối tượng người dùng kia. Nhưng nếu áp dụng __sleep() thì bạn cũng có thể nguyên tắc được những nằm trong tính hoàn toàn có thể trả về.__wakeup(): sẽ tiến hành Hotline Khi chúng ta unserialize() đối tượng. Chúng thường được áp dụng nhằm triển khai một hoặc các hành vi làm sao đó Lúc đối tượng người sử dụng được unserialize().__toString(): sẽ được gọi khi họ sử dụng đối tượng người tiêu dùng như một string.__invoke(): sẽ tiến hành điện thoại tư vấn Khi họ sử đối tượng người tiêu dùng như một hàm.__set_state(): Đây là phương thức ít được áp dụng duy nhất trong PHP cùng đa số là ko bao giờ. Pmùi hương thức này sẽ được điện thoại tư vấn Lúc họ var_export() đối tượng người dùng.__clone(): được điện thoại tư vấn Khi chúng ta clone object.__debugInfo(): được Gọi khi bọn họ var_dump() đối tượng người sử dụng. thường thì, khi chúng ta var_dump() một đối tượng người tiêu dùng thì nó đã trả về tất cả những trực thuộc tính với quý hiếm của nó trong đối tượng kia, dẫu vậy khi họ thực hiện cách tiến hành __debugInfo()thì chúng ta có thể thiết lập cấu hình thông số trả về.__call(): hàm Hotline, được Gọi lúc ta điện thoại tư vấn mang lại một cách tiến hành ko vĩnh cửu vào đối tượng__callStatic(): hàm điện thoại tư vấn static, được gọi lúc ta điện thoại tư vấn cho một cách tiến hành tĩnh không vĩnh cửu trong đối tượng

Ưu cùng nhược điểm của magic functions :

Ưu điểm:Giúp mang lại bọn họ tùy biến chuyển được những hành vi.Nó giúp cho bạn có thể khởi chế tạo ra một đối tượng người sử dụng theo cách bạn muốn.Nhược điểm:Tốc độ chậm chạp rộng những function bình thường.

Xem thêm: Làm Thế Nào Để Theo Dõi Điện Thoại Miễn Phí Tốt Nhất Ios, Iphone

7. Các luật lệ vào PSR-2

Viết code chuẩn (coding convention) là họ tuân hành một chế độ vào viết code của một bạn hữu hay như là 1 chủ thể dựa theo quy chuẩn chỉnh trong thiết kế. Tùy thuộc vào ngôn ngữ sẽ sở hữu được chuẩn viết code khác biệt. Trong bài viết này mình vẫn nói tới chuẩn code PSR-2 trong PHP..

PSR có nghĩa là PHP Standards Recommendations. Có rất nhiều PSR từ PSR-0 mang lại PSR-7. Trong đó PSR-1 cùng PSR-2 bọn họ đang xúc tiếp tương đối nhiều. PSR-1 để giúp chúng ta biết thề nào và có tác dụng thế làm sao để tại vị tên biến chuyển, tên hàm sau mang lại dể phát âm, dể đọc mang ý nghĩa thống độc nhất vô nhị toàn bộ.

Khác cùng với PSR-1, PSR-2 sẽ mang tính trình diễn là thiết yếu. Nó bao gồm nhiệm vụ vô cùng quan liêu trong trong câu hỏi trình bài những mẫu code của chúng ta. từ các dòng tab hay xuống mặt hàng thân những mẫu, những hàm một giải pháp tỉ mỉ.

Vậy tại sao lại cần viết code chuẩn

Như mình đã kể sinh sống bên trên bài toán viết code chuẩn cực kỳ quan trọng. so với rất nhiều ai thường xuyên không tuân theo công cụ viết code chuẩn (viết tùy ý) đó chỉ hoàn toàn có thể thao tác cá nhân.Các chúng ta nên đừng quên Khi đi làm họ điều làm cho teamwork không thể mõi fan một cách viết. Mõi bạn một biện pháp viết là đúng vào khi nói đến tư duy logic trong lập trình hoàn toàn có thể cùng một hiệu quả dẫu vậy lại có không ít cách viết khác biệt.Sự thống duy nhất về kiểu cách trình bày. quý khách viết như thế nào lúc fan không giống xem lại hoặc sữa code của khách hàng vẫn hiểu được chiếc function của khách hàng đã viết cái gì nên không nào.

Các quy tắc:

Code PHẢI tuân thủ PSR-1Code PHẢI áp dụng 4 ký tự space để lùi kân hận (không sử dụng tab)Mỗi mẫu code PHẢI bên dưới 1đôi mươi ký trường đoản cú, NÊN bên dưới 80 ký tự.PHẢI có một cái Trắng sau namespace, với PHẢI gồm một chiếc Trắng sau mỗi khối code.Ký trường đoản cú mnghỉ ngơi lớp PHẢI sinh sống chiếc tiếp sau, và đóng lớp PHẢI ngơi nghỉ chiếc tiếp theo sau của thân class.Ký trường đoản cú mang lại hàm PHẢI sống cái tiếp sau, và cam kết tự xong xuôi hàm PHẢI sinh hoạt chiếc tiếp theo của thân hàm.Các visibility (public, private, protected) PHẢI được khai báo mang lại toàn bộ các hàm cùng các trực thuộc tính của lớp;Các trường đoản cú khóa điều khiển và tinh chỉnh khối(if, elseif, else) PHẢI bao gồm một khoảng trống sau chúng; hàm và lớp thì KHÔNG ĐƯỢC có tác dụng như vậy.Mlàm việc khối hận cho cấu tạo tinh chỉnh PHẢI bên trên cùng một dòng; và đóng góp kân hận này với ngơi nghỉ chiếc tiếp theo của thân kăn năn.Hằng số true, false, null PHẢI viết với chữ hay.Từ khóa extends và implements PHẢI cùng cái với classImplements những lớp, thì mỗi lớp bên trên một dòngKeyword var KHÔNG ĐƯỢC cần sử dụng thực hiện khai báo property.Tên property KHÔNG NÊN có tiền tố _ nhằm mục tiêu trình bày nằm trong tính protect tốt private.Tsi mê số đến hàm, pmùi hương thức: KHÔNG có thêm space vào trước dấu , và PHẢI gồm một space sau ,. Các tsi mê số CÓ THỂ trên những loại, trường hợp làm cho những điều đó thì PHẢI mỗi cái 1 tsay mê số.Abstract, final PHẢI đứng trước visibility, còn static đề nghị đi sau.

Một số chi tiết về chuẩn chỉnh PSR-1:

Các file đề nghị thực hiện thẻ hoặc .File PHP chỉ thực hiện encode: UTF-8 without BOM cùng với code PHPhường.Các tệp tin buộc phải dùng để knhì báo những nguyên tố PHPhường (những lớp, hàm, hằng ...) hoặc dùng với mục đích có tác dụng hiệu ứng prúc (nhỏng include, tùy chỉnh thiết lập ini mang đến PHPhường. ...), cơ mà tránh việc sử dụng vào cả 2 trường hòa hợp.Các namespace cùng những class phải theo chuẩn chỉnh "autoloading" PSR: .Tên Class đề xuất bao gồm dạng NameClass.Hằng số trong class đề xuất được knhị báo bằng phương pháp viết hoa với chia ra vày dấu _.

Tạm kết