Namespace php là gì

Xin chào toàn bộ đầy đủ fan. Hôm ni bản thân đã quay trở về phần 2 vào bài viết về xây dựng phía đối tượng người dùng trong PHP. Trong phần một mình sẽ kể về bố vấn đề Các Điểm lưu ý cơ phiên bản của xây dựng hướng đối tượng. Chúng được biểu thị như thế nào vào PHP, Sự biệt lập giữa Abstract Class cùng Interface cùng Thế nào là một trong những hàm static, biệt lập bí quyết cần sử dụng keyword static::method() cùng với self::method().Quý Khách sẽ xem: Namespace php là gì

Mục lục

Phần 1

Các Điểm lưu ý cơ bạn dạng của lập trình hướng đối tượng. Chúng được mô tả ra sao trong PHPSự khác biệt giữa Abstract Class với Interface.Thế nào là một trong những hàm static. Phân biệt biện pháp sử dụng từ khoá static::method() cùng với self::method()

Phần 2

Thế nào là TraitThế làm sao là NamespacesThế làm sao là magic functionsTìm hiểu về các luật lệ vào PSR-2

Phần 3

Các phương pháp xây dựng hướng đối tượng người dùng (SOLID)

Trong phần này, bản thân đã chia sẻ về 4 vấn tiếp theo trong loạt bài viết, đó là: Thế nào là Trait, Thế làm sao là Namespaces, Thế như thế nào là magic functions, Tìm đọc về các luật lệ vào PSR2.

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

Nội dung

4. Thế nào là Trait

Trait được reviews trong PHPhường phiên phiên bản 5.4.0 và được quan niệm là 1 trong những chế độ được cho phép lập trình sẵn viên tận dụng tài năng tái thực hiện lại code (code reusability) lúc lập trình với ngôn ngữ chỉ cho phép quá kế từ một class độc nhất vô nhị (xuất xắc còn được gọi là single inheritance) nlỗi PHPhường.Vậy Trait là gì?Trait là 1 module hỗ trợ cho bạn có thể thực hiện lại những cách tiến hành được knhị báo trong trait vào những class không giống nhau hoặc trong các trait khác một phương pháp đơn giản và dễ dàng rộng là kế thừa như lúc trước.Một trait tựa như như là 1 trong những class tuy thế chỉ nhằm mục đích nhóm tác dụng lại. Và trait cần thiết khởi tạo thành giống class và trait ra đời nhằm bổ sung cập nhật cho kế thừa truyền thống lịch sử. Ttốt bởi vì nên kế thừa 1 class hay interface nhằm áp dụng lại 1 nhóm chức năng, thì với trait chúng ta không nhất thiết phải thừa kế vẫ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 áp dụng trait với cũng phân vân cần sử dụng trait ở đâu

*

. Mà ta thấy nếu như gồm nếu như tất cả quá nhiều class thì câu hỏi extends lại vẫn làm tác động không ít cho quá trình, 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 chúng ta thấy không, bản thân ko phải extends tuy vậy vẫn có thể sử dụng lại các cách thức của method listUsers() nlỗi trên.Để sử dụng trait vào PHPhường thì chúng ta chỉ cần dùng trường đoản cú khóa use nhằm Điện thoại tư vấn trait bạn có nhu cầu áp dụng trong code của người tiêu dùng. Sau kia chúng ta có thể thực hiện những cách tiến hành trong trait mà các bạn sẽ use. lấy ví dụ như sinh sống trên mình use Database sau đó sẽ sử dụng lại được cách tiến hành listUser() trong trait nàyÀ, mang lại trên đây, ta lại thấy, nếu như muốn áp dụng các phương thức trong tương đối nhiều trait thì làm cho như thế nào? Tiếp tục nhé.

trait Database public function sayHello() eđến "hello"; /*** */trait World public function sayWorld() eđến "World"; /*** */class MyHelloWorld use Database, World; public function sayHelloWorld() echo "!"; $o = new MyHelloWorld();$o->sayHello();$o->sayWorld();$o->sayHelloWorld();//Kết quả : helloWorld!Các các bạn hãy quan sát hình nhé. Tại đây mình tất cả 2 trait là Hello với World cất theo thứ tự cách tiến hành là sayHello() cùng sayWorld().Và Việc sử dụng chúng khá dễ dàng và đơn giản như thể áp dụng một trait vậy. Quý khách hàng hoàn toàn có thể use và áp dụng các cách thức bên trong nó nhỏng bình thường. Có vẻ các sản phẩm công nghệ đang ổn. Nhưng nếu một ngày ko rất đẹp trời, các cách thức trong số trait giống như nhau, chúng ta vẫn nên làm cho sao?Ở đây ta đang thực hiện insteadof để xét độ ưu tiên mang đến cách tiến hành bạn có nhu cầu sử dụng.lấy 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; //điện thoại tư vấn trait use SetGetName,SetGetAge //ưu tiên thực hiện thủ tục getall của trait SetGetAge SetGetAge::getAll insteadof SetGetName; Tiếp theo, họ đã tìm hiểu về một trong những phần rất đặc trưng trong trait đó là trait lồng. Quý khách hàng vẫn khi nào suy nghĩ giả dụ có 100 trait, ta sẽ use tận 100 lần. Vấn đề này là không nên. Nhìn khôn cùng củ chuối =)))Ví dụ:

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

5. Thế nào là namespace

Định nghĩa: Được knhị báo với tự khóa namespace. Mỗi file đựng 1 namespace đề xuất được khai báo bên trên thuộc trước các code khác trong tệp tin. Cách thực hành thực tế tốt nhất là mỗi file chứa 1 class với tên class trùng với tên tệp tin đồng thời có một namespace biểu lộ được đường truyền cho tới file đó

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

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

use AppControllersHomeController;

6. Thế nào là magic functions

Trong thiết kế hướng đối tượng để triển khai cho bài toán sử dụng những đối tượng người dùng dễ ợt hơn, PHP. cũng cung cấp một vài Magic Method, hoặc các cách thức đặc biệt quan trọng được Call Khi các hành vi nhất mực xẩy ra trong các đối tượng. Điều này có thể chấp nhận được những lập trình viên tiến hành một số nhiệm vụ có lợi tương đối thuận tiện.Trong bài này bản thân xin phxay nói về 2 magic function đặc biệt quan trọng cùng tuyệt dùng duy nhất vào thiết kế hướng đối tượng người dùng vào PHPhường. Đó là Constructors và Destructors.Trước hết bản thân xin lấn sân vào Constructors, vậy Constructors là gì?Xét ví dụ sau:

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

/*** */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 . "";public function __destruct()eđến "Đối tượng vừa bị hủy! ";$obj = new ClassName();emang lại $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 biện pháp cụ thể, chúng ta có thể diệt đối tượng Object tức thì mau lẹ bằng phương pháp áp dụng hàm unset() :

/*** */class ClassName public $example = "Đây là ở trong 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 lại $obj->getProperty();unset($obj);echo "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, bọn họ đang đi đến những hàm quan trọng đặc biệt khác...__get : sẽ auto được Gọi khi chúng ta lôi ra quý hiếm của những nằm trong tính vào đối nhưng họ ko được phnghiền truy vấn nó từ bên phía ngoài hoặc ko mãi mãi.VD:

class ConNguoi private $title = "toàn nước vô địch" ; public function __get($key) //soát sổ xem trong class gồm lâu dài trực thuộc tính ko if(property_exists($this, $key)) //tiến hành rước giá trị return $this->$key; else die("Không trường thọ thuộc tính"); public function getTitle() emang lại $this->title; $vietphái mạnh = new ConNguoi();eđến $vietnam->title;//VN vô địch$vietnam->age;//Không sống thọ trực thuộc tính__mix : đang auto được Call Lúc bọn họ tùy chỉnh thiết lập giá trị cho một nằm trong tính không được phxay truy vấn trường đoản cú phía bên ngoài, hoặc ko vĩnh cửu.

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

Ưu với điểm yếu kém của magic functions :

Viết code chuẩn chỉnh (coding convention) là họ tuân thủ một pháp luật vào viết code của một bè cánh hay một cửa hàng dựa vào quy chuẩn trong thiết kế. Tùy nằm trong vào ngôn từ sẽ có được chuẩn chỉnh viết code khác biệt. Trong bài viết này bản thân đã nói đến chuẩn chỉnh code PSR-2 trong PHP.

Xem thêm: Tra Từ Catchment Area Là Gì ? Nghĩa Của Từ Catchment Trong Tiếng Việt

PSR Có nghĩa là PHP Standards Recommendations. Có rất nhiều PSR từ PSR-0 đến PSR-7. Trong số đó PSR-1 với PSR-2 họ đang xúc tiếp tương đối nhiều. PSR-1 sẽ giúp đỡ bọn họ biết thề nào và làm cố gắng như thế nào để đặt tên thay đổi, thương hiệu hàm sau đến dể gọi, dể đọc mang tính chất thống tốt nhất tổng thể.

Khác cùng với PSR-1, PSR-2 sẽ mang ý nghĩa trình diễn là chủ yếu. Nó có trọng trách rất quan trong trong Việc trình bài các loại code của công ty. trường đoản cú các cái tab giỏi xuống mặt hàng thân những loại, những hàm một phương pháp tinh tế.

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

Nlỗi mình đã nhắc nghỉ ngơi bên trên việc viết code chuẩn khôn cùng quan trọng đặc biệt. đối với đầy đủ ai hay không tuân theo luật pháp viết code chuẩn (viết tùy ý) kia chỉ có thể thao tác làm việc cá nhân.Các chúng ta nên hãy nhờ rằng Khi đi làm chúng ta điều làm teamwork quan yếu mõi người một cách viết. Mõi người một biện pháp viết là đúng vào khi nói tới bốn duy ngắn gọn xúc tích trong lập trình hoàn toàn có thể cùng một tác dụng cơ mà lại có khá nhiều phương pháp viết không giống nhau.Sự thống duy nhất về kiểu cách trình bày. Bạn viết ra sao Lúc người khác xem xét lại hoặc sữa code của chúng ta vẫn gọi được cái function của công ty vẫn viết vật gì nên ko như thế nào.

Xem thêm: Cầu Gò Dưa Ở Đâu - Làm Sao Để Đến Cầu Gò Dưa Ở Thủ Đức Bằng Xe Buýt

Các quy tắc:

Một số cụ thể về chuẩn chỉnh PSR-1:

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

Tạm kết

Chuyên mục: Hỏi Đáp

Chuyên mục: Hỏi Đáp