Namespace php là gì

Xin chào toàn bộ phần đông bạn. Hôm ni mình đang trở lại phần 2 trong bài viết về lập trình sẵn phía đối tượng người tiêu dùng vào PHP.. Trong phần một mình đã đề cập về bố vụ việc Các Điểm lưu ý cơ bản của lập trình hướng đối tượng người sử dụng. Chúng được thể hiện ra làm sao trong PHP, Sự khác biệt thân Abstract Class với Interface với Thế nào là một trong những hàm static, biệt lập biện pháp sử dụng từ khóa static::method() cùng với self::method().Quý khách hàng sẽ xem: Namespace php là gì

Mục lục

Phần 1

Các điểm lưu ý cơ phiên bản của thiết kế phía đối tượng người tiêu dùng. Chúng được biểu thị như thế nào vào PHPSự biệt lập giữa Abstract Class với Interface.Thế làm sao là một trong hàm static. Phân biệt cách sử dụng từ khoá static::method() cùng với self::method()

Phần 2

Thế như thế nào là TraitThế như thế nào là NamespacesThế làm sao là magic functionsTìm phát âm về những luật lệ trong PSR-2

Phần 3

Các cách thức xây dựng phía đối tượng người sử dụng (SOLID)

Trong phần này, bản thân đang chia sẻ về 4 vấn tiếp theo sau trong loạt nội dung bài viết, đó là: Thế nào là Trait, Thế làm sao là Namespaces, Thế nào là magic functions, Tìm hiểu về các quy tắc trong PSR2.quý khách hàng đã xem: Namespace php là gì

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

*

. Mà ta thấy ví như có giả dụ gồm quá nhiều class thì vấn đề extends lại đã làm tác động không hề ít mang đến quá trình, tài nguyên ổn, tính năng.Hướng giải quyết và xử lý nlỗi 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 bắt buộc extends nhưng vẫn rất có thể áp dụng lại những thủ tục của method listUsers() nhỏng trên.Để sử dụng trait vào PHPhường. thì chúng ta chỉ cần sử dụng từ bỏ khóa use nhằm Điện thoại tư vấn trait bạn muốn sử dụng trong code của bạn. Sau đó bạn có thể sử dụng những thủ tục trong trait nhưng mà chúng ta vẫn use. Ví dụ sinh hoạt trên mình use Database kế tiếp vẫn thực hiện lại được cách tiến hành listUser() vào trait nàyÀ, cho phía trên, ta lại thấy, nếu còn muốn thực hiện nhiều phương thức trong vô số trait thì làm cho như vậy nào? Tiếp tục nhé.

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

trait Database public function sayHello() echo "hello"; /*** */trait World public function sayWorld() eđến "World"; /*** */class MyHelloWorld use Database, World; public function sayHelloWorld() emang đến "!"; $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 cùng World đựng lần lượt thủ tục là sayHello()sayWorld().Và bài toán thực hiện chúng tương đối đơn giản như thể thực hiện một trait vậy. Quý khách hàng có thể use với sử dụng các thủ tục phía bên trong nó như thông thường. Có vẻ các thứ sẽ ổn định. Nhưng trường hợp một ngày không đẹp nhất ttránh, các phương thức trong các trait giống nhau, chúng ta đã đề xuất làm sao?Tại phía trên ta đang sử dụng insteadof để xét độ ưu tiên đến thủ tục bạn muốn thực hiện.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; //gọi trait use SetGetName,SetGetAge //ưu tiên áp dụng cách tiến hành getall của trait SetGetAge SetGetAge::getAll insteadof SetGetName; Tiếp theo, chúng ta vẫn mày mò về 1 phần siêu đặc trưng trong trait đó là trait lồng. Quý khách hàng vẫn khi nào suy nghĩ nếu như tất cả 100 trait, ta sẽ use tận 100 lần. Vấn đề này là tránh việc. Nhìn vô cùng củ chuối =)))Ví dụ:

trait Hello public function sayHello() emang lại "Hello "; trait World public function sayWorld() emang lại "World!"; trait HelloWorld use Hello, World;class MyHelloWorld use HelloWorld;$o = new MyHelloWorld();$o->sayHello();$o->sayWorld();// hiệu quả : Hello World!Việc sử dụng trait lồng không quá tinh vi và là cách hỗ trợ cho code dễ dàng quan sát, tác dụng hơn.

5. Thế nào là namespace

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

Knhì báo : Giống nlỗi đường dẫn tới thư mục. Cách thực hành thực tế cực tốt là nên được sắp xếp namespaces theo cấu trúc thỏng mục đựng nó, vấn đề đó là hoàn hảo và tuyệt vời nhất lúc kết phù hợp với autoloading vào PHP.VD: Tạo 1 class HomeController và viết tên như sau:

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

use AppControllersHomeController;

6. Thế như thế nào là magic functions

Trong xây dựng hướng đối tượng để gia công cho Việc áp dụng các đối tượng thuận lợi hơn, PHPhường. cũng cung cấp một số trong những Magic Method, hoặc những cách tiến hành đặc trưng được Hotline khi các hành động một mực xảy ra trong các đối tượng người tiêu dùng. Như vậy có thể chấp nhận được các thiết kế viên tiến hành một số nhiệm vụ hữu ích tương đối dễ dãi.Trong bài xích này bản thân xin phnghiền nói tới 2 magic function đặc biệt cùng tuyệt dùng nhất trong thiết kế phía đối tượng trong PHP.. Đó là Constructors với 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à nằm trong tính của class"; public function __construct()echo "Đố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();eđến $obj->getProperty();// tác dụng : //Đối tượng vừa được khởi tạo! //Đây là trực thuộc tính của classCác chúng ta thấy gì nào? Sau Khi khởi chế tạo đối tượng NameClass, mau lẹ hàm __construct() đã auto chạy. Điều này y như một biện pháp thông báo đến fan xây dựng.Destructors: Bản hóa học ngược chở lại cùng với Constructors.Ví dụ:

/*** */class ClassName public $example = "Đây là thuộc tính của class"; public function __construct()eđến "Đố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 lại "Đối tượng vừa bị hủy! ";$obj = new ClassName();echo $obj->getProperty();echo "Kết thúc! ";//kết quả://Đối tượng vừa được khởi tạo! //Đây là 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 bí quyết cụ thể, chúng ta cũng có thể hủy đối tượng Object ngay 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()emang đế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()eđến "Đố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 đượ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 mang lại những hàm quan trọng đặc biệt không giống...__get : đang tự động được hotline Lúc chúng ta kéo ra cực hiếm của những trực thuộc tính vào đối mà lại họ không được phxay truy cập nó trường đoản cú phía bên ngoài hoặc ko sống thọ.VD:

class ConNguoi private $title = "toàn quốc vô địch" ; public function __get($key) //kiểm tra xem trong class tất cả mãi mãi thuộc tính không if(property_exists($this, $key)) //triển khai đem quý giá return $this->$key; else die("Không tồn tại ở trong tính"); public function getTitle() eđến $this->title; $vietnam = new ConNguoi();echo $vietnam->title;//nước ta vô địch$vietnam->age;//Không vĩnh cửu nằm trong tính__set : đang tự động hóa được Điện thoại tư vấn Khi họ tùy chỉnh thiết lập quý hiếm cho 1 thuộc tính không được phxay truy vấn tự phía bên ngoài, hoặc không sống thọ.

Xem thêm: Mnsd Nghĩa Là Gì ? Mnsd Có Nghĩa Là Gì

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

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

PSR Tức là PHP. Standards Recommendations. Có không ít PSR từ bỏ PSR-0 mang đến PSR-7. Trong đó PSR-1 và PSR-2 chúng ta sẽ xúc tiếp rất nhiều. PSR-1 để giúp đỡ bọn họ biết thề nào và có tác dụng gắng nào để đặt tên biến hóa, tên hàm sau mang lại dể phát âm, dể phát âm mang ý nghĩa thống tốt nhất cục bộ.

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

Xem thêm: Winrar Download Phần Mềm Winrar Miễn Phí, Download Winrar Mới Nhất 5

Vậy tại sao lại đề xuất viết code chuẩn

Các quy tắc:

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

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

Tạm kết

Chulặng mục: Hỏi ĐápChuyên ổn mục: Hỏi Đáp